1. 程式人生 > >Leetcode(7)合併兩個有序連結串列

Leetcode(7)合併兩個有序連結串列

題目描述
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

解題思路
單項有序連結串列嘛,無非是指標的操作,兩個有序連結串列,將其合併為一個有序連結串列,只需逐個判斷其大小,然後操作指標即可

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode *l = new ListNode(-1), *curent = l;
        while (l1 && l2) {
            if (l1->val < l2->val) 
            {
                curent->next = l1; l1 = l1->next;curent = curent->next;
            } else
             {
                curent->next = l2; l2 = l2->next;curent = curent->next;
            }
        }
        curent->next = l1 ? l1 : l2;
        return l->next;
    }
};

第二種解題思路
利用遞迴的方式,這個有點難,參考了下別人的程式碼

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (!l1) return l2;
        if (!l2) return l1;
        if (l1->val < l2->val) {
            l1->next = mergeTwoLists(l1->next, l2);
            return l1;
        } else {
            l2->next = mergeTwoLists(l1, l2->next);
            return l2;
        }
    }
};