【问题】输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
【思路】这个思路应该都可以想到归并排序的方法,然后进行组合形成最终的链表,需要注意的是,由于pHead1和pHead2的第一个链表节点谁大谁小不确定,因此头结点无法确定,因此我们需要新建一个哨兵节点pHead,用来创建一个链表的首节点,最终返回pHead.next为真正的头结点!
1/* 2struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8};*/ 9class Solution { 10public: 11 ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 12 { 13 ListNode* pHead = new ListNode(-1); 14 ListNode* cur = pHead; 15 16 while(pHead1 != nullptr && pHead2 != nullptr){ 17 if(pHead1->val < pHead2->val){ 18 cur->next = pHead1; // 新链表头结点 19 pHead1 = pHead1->next; 20 }else{ 21 cur->next = pHead2; 22 pHead2 = pHead2->next; 23 } 24 cur = cur->next; 25 } 26 if(pHead1 != nullptr){ 27 cur->next = pHead1; 28 } 29 if(pHead2 != nullptr){ 30 cur->next = pHead2; 31 } 32 return pHead->next; 33 } 34};