廈門大學數據結構期末考試單鏈表問題
阿新 • • 發佈:2017-07-11
div span null flag 元素 算法 sca del ext
因為過幾天要去參加廈門大學的夏令營,提前刷了下廈門大學往年的期末考試試卷。
卷中有這麽一道題目:
有一個單鏈表,其結點的元素值以遞增順序排列,給出數據結構,並編寫一個算法刪除該單鏈表中元素值相同的結點。
算法如下:
從頭到尾掃描單鏈表,若當前結點和後繼結點的值不相同,則指針後移,若相同,則刪除該後繼結點。
1 #include "stdio.h" 2 3 typedef struct Node{ 4 int data; 5 struct Node *next; 6 }Node, *LinkList; 7 8 void InitList(LinkList *L)9 { 10 (*L) = (LinkList)malloc(sizeof(Node)); 11 (*L)->next = NULL; 12 } 13 14 void creat(LinkList p) 15 { 16 Node *s; 17 int flag = 1, num; 18 while(flag) 19 { 20 scanf("%d", &num); 21 if(num >= 0) 22 { 23 s = (LinkList)malloc(sizeof(Node)); 24 s->data = num; 25 s->next = p->next; 26 p->next = s; 27 } 28 else 29 { 30 flag = 0; 31 } 32 } 33 } 34 35 void print(LinkList p) 36 { 37 Node *s = p->next; 38 if(s == NULL) 39 printf("NULL\n"); 40 while(s != NULL) 41 { 42 printf("%d ", s->data); 43 s = s->next; 44 } 45 printf("\n"); 46 } 47 48 void deleta_same(LinkList p) 49 { 50 Node *q, *s = p->next; 51 if(s == NULL) 52 printf("NULL\n"); 53 while(s->next != NULL) 54 { 55 if(s->data != s->next->data) 56 s = s->next; 57 else 58 { 59 q = s->next; 60 s->next = q->next; 61 free(q); 62 } 63 } 64 } 65 66 int main() 67 { 68 Node *p; 69 InitList(&p); 70 creat(p); 71 print(p); 72 deleta_same(p); 73 print(p); 74 }
廈門大學數據結構期末考試單鏈表問題