鍊錶合併問題是一道經典題目,包括後面引申出的k個鍊錶合併。leetcode 21 合併兩個有序鍊錶可以使用遞迴與非遞迴兩種方法實現。
1.遞迴方法
def
mergetwolists
(l1, l2):if
not l1:
return l2
ifnot l2:
return l1
if l1.val < l2.val:
l1.next
= mergetwolists(l1.
next
, l2)
return l1
else
: l2.
next
= mergetwolists(l1, l2.
next
)return l2
2.非遞迴(迭代)def
mergetwolists
(l1, l2):if
not l1:
return l2
ifnot l2:
return l1
cur1, cur2 = l1, l2
headnode = listnode(
none
)#需要建立乙個新鍊錶
tmp = headnode
while cur1 and cur2:
if cur1.val < cur2.val:
tmp.
next
= cur1
cur1 = cur1.
next
else
: tmp.
next
= cur2
cur2 = cur2.
next
tmp = tmp.
next
tmp.
next
= cur1 if cur1 else cur2 #需要處理上一步迴圈完之後,還有鍊錶節點未考慮進來的問題
return headnode.
next
遞迴方法思路較簡單直接,迭代方法和歸併排序有些相似。 leetcode刷題 鍊錶篇
class solution return result class solution class solution return cura 注 思路 相交節點到尾部的節點數是一樣的,所以當cura遍歷到尾部時,再從headb開始遍歷,同當curb遍歷到尾部時,再從heada開始遍歷,他們指標相遇時...
刷題 合併K個排序鍊錶
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 拿到題按照規矩,首先先暴力一遍,把拿到的資料全部放進陣列sort一下,然後放進乙個鍊錶 ps 太久沒有接觸鍊錶了,幾乎忘完了.寫next的時候還在...
Leetcode刷題鍊錶之合併有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 由於兩個鍊錶都是有序的,因此相當於固定乙個鍊錶,另乙個鍊錶插入到其中。這裡只要比較兩個鍊錶中節點中值的大小即可。可以先建立乙個新的鍊錶,設定乙...