MOOC陳越資料結構第二週02-線性結構1 兩個有序連結串列序列的合併 (15 分)
阿新 • • 發佈:2018-12-10
首先讀題,題目中說L1,L2都為含頭節點的,第一次做的時候沒有認真讀題以為不帶頭節點,傳出的連結串列也要求帶頭節點。
程式碼
List Merge(List L1,List L2){ List pa,pb,pc,L; L = (List)malloc(sizeof(struct Node)); pa = L1->Next; pb = L2->Next; //因為傳入的連結串列帶有空的頭節點 pc = L; while (pa && pb) { if(pa->Data < pb->Data) { pc->Next = pa; //假設pc工作節點指向的為第三個節點,現在把第四個節點pa加在第三個後方 pc = pa; //讓工作節點指向第四個節點,方便後續的插入 pa = pa->Next; } else if (pa->Data > pb->Data) { pc->Next = pb; pc = pb; //pc = pc->Next 也正確 pb = pb ->Next; } else if(pa->Data == pb->Data) //相等 { pc->Next = pa; pc = pa; pa = pa->Next; //如果pa,pb都指向下一個回報錯,可能是允許數字重複出現? } } if(pa == NULL) //把剩下的連結串列直接加在pc的後面 { pc->Next = pb; } else if(pb == NULL) { pc->Next = pa; } L1->Next = NULL; //因為題目要求輸出NULL L2->Next = NULL; return L; }