1. 程式人生 > 其它 >單鏈表刪除其中重複元素

單鏈表刪除其中重複元素

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 }