劍指 Offer 25 合併兩個排序的鍊錶 遞迴

2021-10-09 01:22:53 字數 1942 閱讀 4910

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。

示例1:

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

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

遞迴:

終止條件:兩條鍊錶分別名為 l1 和 l2,當 l1 為空或 l2 為空時結束

返回值:每一層呼叫都返回排序好的煉表頭

本級遞迴內容:如果 l1 的 val 值更小,則將 l1.next 與排序好的煉表頭相接,l2 同理

# 遞迴

l1.next

= self.mergetwolists(l1.

next

, l2)

return l1

else

:#l2.val<=l1.val

l2.next

= self.mergetwolists(l2.

next

, l1)

return l2

迭代

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

mergetwolists

(self, l1: listnode, l2: listnode)

-> listnode:

# 維護乙個啞節點

prehead = listnode(-1

)# 設定乙個指標指向啞節點

pre = prehead

# 迭代

while l1!=

none

and l2!=

none

:if l1.val<=l2.val:

pre.

next

= l1

l1 = l1.

next

else

: pre.

next

= l2

l2 = l2.

next

pre = pre.

next

# 合併後 l1 和 l2 最多只有乙個還未被合併完,我們直接將鍊錶末尾指向未合併完的鍊錶即可

pre.

next

= l1 if l1!=

none

else l2

return prehead.

next

劍指offer 25 合併兩個排序的鍊錶

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。1 非遞迴的方法 如果可以改變鍊錶,直接從頭結點開始依次移動比較兩個鍊錶當前值的大小,把較小的值作為當前結點的下乙個結點。注意 剛剛開始的時候不知道頭結點到底是1的還是2的,所以新建乙個額外的新節點作為輔助 ...

劍指offer25 合併兩個排序的鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然使遞增排序的。例如 輸入下圖的鍊錶1和鍊錶2,則合併之後的公升序鍊錶如圖鍊錶3所示。鍊錶定義如下 思路 從兩個鍊錶的頭結點開始,比較兩個鍊錶的頭結點的值大小,值小的結點就是合併後鍊錶的頭結點,繼續合併鍊錶中剩餘的節點,在兩個鍊錶中剩下...

劍指offer 25 合併兩個排序的鍊錶

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。輸入 1 3 5 2 4 5 輸出 1 2 3 4 5 5 二路歸併 新建乙個頭節點pmergedhead,並設定乙個指標pcurrenthead指向pmergedhead比較phead1和phead2指標指向的值 phead...