题目
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路
归并的思路,注意不要开辟新的内存,直接在原来链表上合并,刚开始被这个坑了。。。。注意边界条件的判断。
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;
}
};