题目描述
输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表。
输入
第一行输入数据个数n;
第二行依次输入n个整数;
第三行输入欲删除数据m。
第二行依次输入n个整数;
第三行输入欲删除数据m。
输出
第一行输出原始单链表的长度;
第二行依次输出原始单链表的数据;
第三行输出完成删除后的单链表长度;
第四行依次输出完成删除后的单链表数据。
第二行依次输出原始单链表的数据;
第三行输出完成删除后的单链表长度;
第四行依次输出完成删除后的单链表数据。
示例输入
10 56 25 12 33 66 54 7 12 33 12 12
示例输出
10 56 25 12 33 66 54 7 12 33 12 7 56 25 33 66 54 7 33
- #include<stdio.h>
- #include<stdlib.h>
- struct node
- {
- int date;
- struct node *next;
- };
- struct node *head=NULL,*p,*q,*tail;
- int main()
- {
- int n,t,m;
- scanf("%d",&n);
- t=n;
- while(n--)
- {
- if((p=(struct node*)malloc(sizeof(struct node)*1))==NULL)
- return 1;
- scanf("%d",&p->date);
- p->next=NULL;
- if(head==NULL)
- {
- head=p;
- q=head;
- }
- else
- {
- q->next=p;
- q=q->next;
- }
- }
- scanf("%d",&m);
- printf("%d\n",t);
- q=head;
- while(q!=NULL)
- {
- printf("%d",q->date);
- if(q->next!=NULL)
- printf(" ");
- q=q->next;
- }
- printf("\n");
- p=head;
- while(p!=NULL)
- {
- if (p->date == m)
- t--;
- p = p->next;
- }
- printf("%d\n",t);
- tail=head;
- while(tail!=NULL)
- {
- if (tail->date != m)
- {
- printf("%d",tail->date);
- if(tail->next!=NULL)
- printf(" ");
- }
- tail=tail->next;
- }
- printf("\n");
- return 0;
- }