題目:
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
思路已經寫在代碼註釋裏面了:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
// 1)異常輸入的處理
// 2)1方爲空時候
// 3)均不爲空的時候,定義一個指針result, 用於指向最後的鏈表
// 4)將兩個鏈表中最小的節點鏈接到result中,此處爲了方便我們直接修改pHead1,怕Head2
// 5)如果其中一個已經遍歷完了該怎麼辦
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 == nullptr) return pHead2;
if(pHead2 == nullptr) return pHead1;
ListNode* result = nullptr; // 初始化一個指針
ListNode* resultHead = nullptr; // 初始化一個指針
while(pHead1 != nullptr && pHead2 != nullptr) //兩個鏈表有一個爲空就退出
{
if(result == nullptr) {
if(pHead1->val < pHead2->val) {
result = pHead1;
pHead1 = pHead1->next;
} else {
result = pHead2;
pHead2 = pHead2->next;
}
resultHead = result;
} else {
while(pHead1!=nullptr && pHead2->val > pHead1->val) {
result->next = pHead1;
pHead1 = pHead1 ->next;
result = result->next;
}
if(pHead1 == nullptr) break;
while(pHead2!=nullptr && pHead2->val <= pHead1->val) {
result->next = pHead2;
pHead2 = pHead2->next;
result = result->next;
}
}
}
if(pHead1!=nullptr) result->next = pHead1; //說明pHead1還有節點
else result->next = pHead2;
return resultHead;//說明pHead1還有節點
}
};