数据结构实验之链表七:单链表中重复元素的删除
Description
按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。
Input
第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。
Output
第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。
Sample
Input
10 21 30 14 55 32 63 11 30 55 30
Output
10 30 55 30 11 63 32 55 14 30 21 7 30 55 11 63 32 14 21
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct node 4 { 5 int data; 6 struct node *next; 7 } set; 8 9 set *creat(set *head)//逆序建立链表 10 { 11 set *p = (set *)malloc(sizeof(set)); 12 p->next = head->next; 13 head->next = p; 14 return p; 15 } 16 void fun(set *head,int n) 17 { 18 set *p,*q,*t;//q和t用于比较,p辅助q进行删除 19 t = head->next;//开始遍历 20 while(t!=NULL) 21 { 22 p = t; 23 q = t->next; 24 while(q)//用q来遍历 25 { 26 if(q->data == t->data)//找到一样 27 { 28 p->next = q->next; 29 q = q->next; 30 n--; 31 } 32 else//这个是继续找 33 { 34 p = p->next; 35 q = q->next; 36 } 37 } 38 t = t->next;//继续找下一个结点 39 } 40 printf("%d\n",n); 41 } 42 void Printf(set *head)//输出 43 { 44 set *p = head->next; 45 while(p) 46 { 47 if(p->next==NULL) 48 printf("%d\n",p->data); 49 else 50 printf("%d ",p->data); 51 p = p->next; 52 } 53 } 54 int main() 55 { 56 int n; 57 scanf("%d",&n); 58 int i; 59 set *head = (set *)malloc(sizeof(set)); 60 head->next = NULL; 61 for(i=0; i<n; i++) 62 { 63 set *p = creat(head); 64 scanf("%d",&p->data); 65 } 66 printf("%d\n",n); 67 Printf(head); 68 fun(head,n); 69 Printf(head); 70 return 0; 71 }

浙公网安备 33010602011771号