力扣21 合併兩個有序鍊錶

2022-03-29 09:59:16 字數 1021 閱讀 6252

將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

示例:

輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

簡單的歸併

1

class

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同理。

class

solution

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...