Description
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
1 2
| Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
|
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| type ListNode struct { Val int Next *ListNode }
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { if l1 == nil { return l2 }
if l2 == nil { return l1 }
if l1.Val < l2.Val { l1.Next = mergeTwoLists(l1.Next, l2)
return l1 }
l2.Next = mergeTwoLists(l2.Next, l1)
return l2 }
|
Note
假設有以下參數:
說明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| 比較串列 1 和串列 2。
---------- l1: 1, 4 ---------- l2: 2, 3 ----------
1 < 2,合併串列 1 的下一個節點開始的串列和串列 2,1.Next 等待返回。
---------- l1: 4 ---------- l2: 2, 3 ----------
2 < 4,合併串列 2 的下一個節點開始的串列和串列 1,2.Next 等待返回。
---------- l1: 4 ---------- l2: 3 ----------
3 < 4,合併串列 2 的下一個節點開始的串列和串列 1,3.Next 等待返回。
---------- l1: 4 ---------- l2: nil ----------
串列 2 為空,返回 4。
---------- l1: 4 ---------- l2: nil ----------
3.Next 接收到 4。
---------- 3.Next = 4 ----------
2.Next 接收到 3。
---------- 2.Next = 3 ----------
1.Next 接收到 2。
---------- 1.Next = 2 ----------
最終返回: 1->2->3->4
|
Code