合併兩個有序連結串列,合併後依然有序
阿新 • • 發佈:2018-12-11
pNode MergeSList(pList plist1, pList plist2) { pNode pNewHead = NULL;//新連結串列 pNode pTail = NULL;//新連結串列的尾指標 pNode pL1 = plist1; pNode pL2 = plist2; if (plist1 == NULL || plist2 == NULL) { return plist1 == NULL ? plist2 : plist1; } //兩個連結串列都不為空 if (pL1->data < pL2->data)//先向新連結串列中放入一個結點 { pNewHead = pL1; pL1 = pL1->next; } else { pNewHead = pL2; pL2 = pL2->next; } //此時新連結串列中已經有了一個結點,這個結點既是新連結串列的第一個結點,也是最後一個結點 pTail = pNewHead; //這時該做的是向新連結串列中尾插結點 while (pL1 && pL2) { //升序 if (pL1->data < pL2->data) { pTail->next = pL1; pL1 = pL1->next; } else { pTail->next = pL2; pL2 = pL2->next; } pTail = pTail->next; } //這時,必然至少有一個連結串列走到末尾 if (pL1) { pTail->next = pL1; } else { pTail->next = pL2; } return pNewHead; }