【问题】输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

【思路】这个思路应该都可以想到归并排序的方法,然后进行组合形成最终的链表,需要注意的是,由于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};