劍指offer之合併有序連結串列
阿新 • • 發佈:2018-12-12
題目
輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
思路
歸併的思路,注意不要開闢新的記憶體,直接在原來連結串列上合併,剛開始被這個坑了。。。。注意邊界條件的判斷。
AC程式碼
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
if(pHead1 == nullptr && pHead2 == nullptr) {
return nullptr;
} else if(pHead1 == nullptr && pHead2 != nullptr) {
return pHead2;
} else if(pHead1 != nullptr && pHead2 == nullptr) {
return pHead1;
}
auto p1 = pHead1, p2 = pHead2;
auto head = p1->val < p2->val ? p1 : p2;
auto p = head;
if(p1->val < p2->val) {
p1 = p1->next;
} else {
p2 = p2->next;
}
while(p1 != nullptr && p2 != nullptr) {
if(p1->val < p2->val) {
p->next = p1;
p1 = p1-> next;
} else {
p->next = p2;
p2 = p2->next;
}
p = p->next;
}
while(p1 != nullptr) {
p->next = p1;
p1 = p1->next;
}
while(p2 != nullptr) {
p->next = p2;
p2 = p2->next;
}
return head;
}
};