单链表删除其中重复元素_重复元素

C++不会,只会CwithSTL

C语言版将就看吧

用数组标记重复元素(临时想不出更高明的办法)

照课本格式写的

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<math.h>
 4 #include<string.h>
 5 #define maxn 1000
 6 typedef struct LNode
 7 {
 8     int data;
 9     struct LNode *next;
10 }LNode, *LinkList;
11 int a[maxn];//
12 void CreateList_L(LinkList &L, int n)
13 {
14     LNode *p,*q;
15     L = (LinkList)malloc(sizeof(LNode));
16     L -> next = NULL;
17     q = L;
18     for(int i = n; i > 0; --i)
19     {
20         p = (LinkList)malloc(sizeof(LNode));
21         scanf("%d",&(p->data));
22         p->next = NULL;
23         q->next = p;
24         q = q -> next;
25     }
26 }//构建链表
27 
28 void DeleRepeat(LinkList &L)
29 {   
30     memset(a,0,sizeof(a));
31     LNode *p,*q;
32     p = L -> next;
33     q = L -> next;
34     a[p -> data] = 1;
35     if(p -> next != NULL)
36     {
37         p = p -> next;
38     }
39     else
40     {
41         return;
42     }
43     
44     while(p!= NULL)
45     {
46         if(a[p -> data] == 0)
47         {
48             a[p -> data] = 1;
49             p = p -> next;
50             q = q -> next;
51         }
52         else
53         {
54             q -> next = p -> next;
55             p = p -> next;     
56         }
57     }
58 }//删除重复元素
59 void Print(LinkList &L)
60 {
61     LNode *p = L -> next;
62     while(p != NULL)
63     {
64         printf("%d ", p -> data);
65         p = p -> next;
66     }
67 }//输出
68 int main()
69 {
70     int n;
71     printf("请输入你要输入的元素个数:");
72     scanf("%d",&n);
73     LNode *L;
74     CreateList_L(L,n);
75     DeleRepeat(L);
76     Print(L);
77     system("pause");
78     return 0;
79 }