1. 程式人生 > >MOOC陳越資料結構第二週02-線性結構1 兩個有序連結串列序列的合併 (15 分)

MOOC陳越資料結構第二週02-線性結構1 兩個有序連結串列序列的合併 (15 分)

首先讀題,題目中說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;

}