LeetCode刷題之分而治之

面試題25. 合併兩個排序的鏈表

在這裏插入圖片描述

思路:最令我困惑的是,幾乎所有人都採取了減而治之的策略,最優解也是如此,但這題卻分類在分而治之…
本題採用減而治之的策略,逐步蠶食問題的規模,最終可以得到問題的答案。不想解釋了,簡單題(對現在的我來說)。

迭代:

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(!l1 || !l2)  return l1 == NULL ? l2 : l1;
        ListNode* visual = new ListNode(1);
        ListNode* pre = visual;
        while(l1 && l2)
        {
            if(l1->val <= l2->val)
            {
                pre->next = l1;
                l1 = l1->next;
            }
            else
            {
                pre->next = l2;
                l2 = l2->next;
            }
            pre = pre->next;
        }
        l1 == NULL ? pre->next = l2 : pre->next = l1;
        pre = visual->next;
        delete visual;
        return prew;
    }
};

遞歸:

class Solution {
public:
	ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
		if (!l1 || !l2)      return l1 == NULL ? l2 : l1;

		if (l1->val <= l2->val) 
		{
			l1->next = mergeTwoLists(l1->next, l2);
			return l1;
		}

		l2->next = mergeTwoLists(l1, l2->next);
		return l2;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章