21 合併兩個有序鍊錶

2021-10-09 05:06:55 字數 1115 閱讀 7227

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

示例:

輸入: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先確定合併鍊錶第乙個節點 在迴圈中同時遍歷兩個鍊錶,將後面其餘節點逐次比較,依大小次序連線到首節點之後,迴圈結束後可能有乙個鍊錶未遍歷完,將這個鍊錶剩...