题解 | 链表
【模板】链表
http://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f
- #include
- using namespace std;
- typedef struct list{
-
int data;
-
list *next;
- }list;
- list *Init_list(list *L)//链表初始化
- {
-
L=(list*) malloc(sizeof(list));
-
L->next=NULL;
-
return L;
- }
- list* insert_list(list* L,int x,int y)//插入功能
- {
-
list *p=(list*)malloc(sizeof(list)),*q=L->next,*j=L;
-
while(q)
-
{
-
if(q->data==x)
-
{
-
p->data=y;
-
p->next=j->next;
-
j->next=p;
-
return L;
-
}
-
j=q;
-
q=q->next;
-
}
-
j->next=(list*)malloc(sizeof(list));
-
j=j->next;
-
j->data=y;
-
j->next=NULL;
-
return L;
- }
- list *delete_list(list *L,int x)
- {
-
list *p=L->next,*q=L;
-
while(p)
-
{
-
if(p->data==x) {q->next=p->next;free(p);return L;}
-
q=p;
-
p=p->next;
-
}
-
return L;
- }
- void clear_visit_list(list *L)//清除和输出
- {
-
list *p=L->next;
-
free(L);
-
while(p)
-
{
-
cout<<p->data<<" ";
-
L=p;
-
p=p->next;
-
free(L);
-
}
- }
- int length_list(list *L)
- {
-
list *q=L->next;
-
int j=0;
-
while(q)
-
{
-
q=q->next;
-
j++;
-
}
-
return j;
- }
- int main()
- {
-
list *L=Init_list(L);
-
int x,y,n;
-
cin>>n;
-
string choose;
-
while(n--)
-
{
-
cin>>choose;
-
if(choose=="insert")
-
{
-
cin>>x>>y;
-
L=insert_list(L,x,y);
-
}
-
else if(choose=="delete")
-
{
-
cin>>x;
-
L=delete_list(L,x);
-
}
-
}
-
if(length_list(L)>0)clear_visit_list(L);
-
else cout<<"NULL";
-
return 0;
- }