單鏈表刪除其中重複元素
阿新 • • 發佈:2021-09-28
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 voidCreateList_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 }