將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:
輸入:1
->2-
>4,
1->3-
>
4輸出:1
->1-
>2-
>3-
>4-
>
4
方法1:遞迴
class
solution
else
if(l2 == nullptr)
else
if(l1-
>val < l2-
>val)
else}}
;
時間複雜度:o(n+m),其中 n 和 m 分別為兩個鍊錶的長度。因為每次呼叫遞迴都會去掉 l1 或者 l2 的頭節點(直到至少有乙個鍊錶為空),函式 mergetwolist 至多只會遞迴呼叫每個節點一次。因此,時間複雜度取決於合併後的鍊錶長度,即 o(n+m)。
空間複雜度:o(n+m),其中 n 和 m 分別為兩個鍊錶的長度。遞迴呼叫 mergetwolists 函式時需要消耗棧空間,棧空間的大小取決於遞迴呼叫的深度。結束遞迴呼叫時 mergetwolists 函式最多呼叫 n+m 次,因此空間複雜度為 o(n+m)。
方法2:迭代
class
solution
else
prev = prev-
>next;
}// 合併後 l1 和 l2 最多只有乙個還未被合併完,我們直接將鍊錶末尾指向未合併完的鍊錶即可
prev-
>next = l1 == nullptr ? l2 : l1;
return prehead-
>next;}}
;
時間複雜度:o(n+m) ,其中 nn 和 mm 分別為兩個鍊錶的長度。因為每次迴圈迭代中,l1 和 l2 只有乙個元素會被放進合併鍊錶中, 因此 while 迴圈的次數不會超過兩個鍊錶的長度之和。所有其他操作的時間複雜度都是常數級別的,因此總的時間複雜度為o(n+m)。
空間複雜度:o(1) 。我們只需要常數的空間存放若干變數。
21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 原本想的是用19題的結構陣列那種方法來做 分別遍歷兩個鍊錶,建立結構儲存原始索引,val和指標,氣泡排序這個結構,更新索引,按照索引建立新的n...
21 合併兩個有序鍊錶
合併兩個有序鍊錶 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4輸出 1 1 2 3 4 4比較簡單,比較大小,重新排序即可。created by hints on 2019 1 9.include using name...
21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4先確定合併鍊錶第乙個節點 在迴圈中同時遍歷兩個鍊錶,將後面其餘節點逐次比較,依大小次序連線到首節點之後,迴圈結束後可能有乙個鍊錶未遍歷完,將這個鍊錶剩...