单链表练习题

时间:2022-06-08 00:11:30

输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表。

Input

第一行输入数据个数n;

第二行依次输入n个整数;

第三行输入欲删除数据m。

Output

第一行输出原始单链表的长度;

第二行依次输出原始单链表的数据;

第三行输出完成删除后的单链表长度;

第四行依次输出完成删除后的单链表数据。

Sample Input

10

56 25 12 33 66 54 7 12 33 12

12

Sample Output

10

56 25 12 33 66 54 7 12 33 12

7

56 25 33 66 54 7 33

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 typedef struct Lnode{
 4     int data;
 5     struct Lnode *next;
 6 }Lnode,*Link;
 7 int main(void){
 8     Link head,k;
 9     Lnode *p,*q,*t;
10     int n,i,x,m;
11     while(scanf("%d",&n)!=EOF){
12     m=n;
13     head=(Link)malloc(sizeof(Lnode));
14     head->next=NULL;
15     t=head;
16      for(i=0;i<n;i++){    
17          k=(Link)malloc(sizeof(Lnode));
18          scanf("%d",&k->data);
19          k->next=NULL;
20          t->next=k;
21          t=k;
22      }
23     scanf("%d",&x);
24     printf("%d\n",n);
25     p=head->next;    
26     for(i=0;i<n-1;i++){
27         printf("%d ",p->data);
28         p=p->next;
29     } 
30     printf("%d\n",p->data);
31     q=head;
32     p=q->next;
33     for(i=0;i<n;i++){
34         if(x==p->data){
35             q->next=p->next;
36             free(p);
37             m--;
38             p=q->next;
39         }
40         else{
41             q=q->next;
42             p=p->next;
43         }
44     }
45     printf("%d\n",m);
46     head=head->next;
47     for(i=0;i<m-1;i++){
48         printf("%d ",head->data);
49         head=head->next;
50     } 
51     printf("%d\n",head->data);
52 }
53     return 0;    
54 }