將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4輸出:1->1->2->3->4->4
簡單的歸併
1class
solution else
15 p =p.next;16}
17//
鏈結多餘的部分
18 p.next = (l1 != null) ?l1 : l2;
19return
head.next;20}
21 }
力扣測試時間為1ms, 空間為39.4mb
複雜度分析:
時間複雜度:最壞情況下需要遍歷所有結點(即交叉連線兩鍊錶結點時),時間複雜度為o(n+m)
空間複雜度:o(1)
1. 先判斷某個鍊錶是否為空,如果為空直接返回另乙個鍊錶
2.如果兩個鍊錶均不為空,根據兩鍊錶的表頭大小決定下一層的遞迴引數。因為 mergetwolists(list1, list2)函式會返回 list1 和 list2 兩個鍊錶合併後的結果,所以如果 l1.val < l2.val, 把 l1.next 和 l2 兩個鍊錶的合併後的結果賦值給 l1.next, 這樣就完成了2個鍊錶的合併,l1.val > l2.val同理。
classsolution
if(l2 == null
)
if(l1.val <=l2.val)
else
}}
力扣測試時間為:0ms, 空間為39mb
時間複雜度:最壞情況下要遍歷所有結點,時間複雜度為o(n+m)
空間複雜度:同樣是在最壞情況下,遞迴深度最大可達(n+m)層,所以空間複雜度為o(n+m)
根據力扣的測試結果,遞迴好像比非遞迴的解法快一些
力扣 21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 definition for singly linked list.struct listnode struct listnode merge...
力扣21 合併兩個有序鍊錶
難度 簡單 題目要求 將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 1 輸入 l1 1,2,4 l2 1,3,4 輸出 1,1,2,3,4,4 示例 2 輸入 l1 l2 輸出 示例 3 輸入 l1 l2 0 輸出 0 題目思想其實很簡單,因為...
力扣題解 21 合併兩個有序鍊錶
將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 遞迴 definition for singly linked list.struct listnode listnode int x...