兩個連結串列的合併
阿新 • • 發佈:2018-12-10
題目要求:
注意題目中的一句話,要求我們使用原來序列中的結點!那麼我們就不能使用新的記憶體單元,來單獨儲存合併後的連結串列。
【如果申請新記憶體,pta會報段錯誤】
使用原來的結點:優點,節省記憶體;缺點,破壞了原來的連結串列,不能原樣輸出原連結串列##
使用新記憶體單元:優點,儲存原連結串列狀態;缺點,浪費記憶體##
使用原來結點的程式碼:
List Merge(List L1, List L2) { List l1, l2, p, head; l1 = L1->Next; l2 = L2->Next; head = (List)malloc(sizeof(struct Node)); head->Next = NULL; p = head; while(l1 && l2) { if(l1->Data <= l2->Data) { p->Next = l1; p = l1; l1 = l1->Next; } else { p->Next = l2; p = l2; l2 = l2->Next; } } if(l1 != NULL) { p->Next = l1; } else{ p->Next = l2; } L1->Next = NULL; L2->Next = NULL; return head; }
不使用原來結點的程式碼:
List Merge(List L1, List L2) { List l1, l2, head, p, t; l1 = L1->Next; l2 = L2->Next; head = (List)malloc(sizeof(struct Node)); head->Next = NULL; p = head; while(L1 && L2) { t = (List)malloc(sizeof(struct Node)); t->Next = NULL; if(l1->Data < l2->Data) { t->Data = l1->Data; p->Next = t; p = t; l1 = l1->Next; } else { t->Data = l2->Data; p->Next = t; p = t; l2 = l2->Next; } } if(!l1) p->Next = l1; else p->Next = l2; L1->Next = NULL; L2->Next = NULL; return head; }