題目描述:
將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:
輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
思路解析:
遞迴法:
根據以上規律考慮本題目:
終止條件:當兩個鍊錶都為空時,表示我們對鍊錶已合併完成。
如何遞迴:我們判斷 l1 和 l2 頭結點哪個更小,然後較小結點的 next 指標指向其餘結點的合併結果。(呼叫遞迴)
class solutionelse if(l2==null)else if(l1.val迭代法
首先,我們設定乙個哨兵節點 head ,這可以在最後讓我們比較容易地返回合併後的鍊錶。我們維護乙個 pre 指標,我們需要做的是調整它的 next 指標。然後,我們重複以下過程,直到 l1 或者 l2 指向了 null :如果 l1 當前節點的值小於等於 l2 ,我們就把 l1 當前的節點接在 prev節點的後面同時將 l1 指標往後移一位。否則,我們對 l2 做同樣的操作。不管我們將哪乙個元素接在了後面,我們都需要把 prev 向後移一位。
在迴圈終止的時候, l1 和 l2 至多有乙個是非空的。由於輸入的兩個鍊錶都是有序的,所以不管哪個鍊錶是非空的,它包含的所有元素都比前面已經合併鍊錶中的所有元素都要大。這意味著我們只需要簡單地將非空鍊錶接在合併鍊錶的後面,並返回合併鍊錶即可。
class solutionelse
pre=pre.next;
}// 合併後 l1 和 l2 最多只有乙個還未被合併完,我們直接將鍊錶末尾指向未合併完的鍊錶即可
pre.next=l1==null?l2:l1;
return head.next;
}}
LeetCode 第21題 合併兩個有序列表
leetcodeno.21合併兩個有序列表 題目 將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 分析 如果某乙個節點為空,乙個不為空 兩個均為空 圖示 下面的圖最後兩張中間跳過了一...
leetcode刷題之旅 21 合併兩個有序鍊錶
definition for singly linked list.struct listnode listnode int x val x next nullptr listnode int x,listnode next val x next next class solution cur ne...
LeetCode刷題日記 21 合併兩個有序鍊錶
今天是開始刷leetcode的第一天,看到題目還幾乎沒有思路。準備先從鍊錶題開始刷。先看答案,然後根據答案掌握c 鍊錶相關用法。根據課程,寫下以下暴力解 definition for singly linked list.struct listnode listnode int x val x ne...