輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。
示例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...