刷題篇 合併鍊錶

2021-10-07 19:13:08 字數 1074 閱讀 8347

鍊錶合併問題是一道經典題目,包括後面引申出的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 由於兩個鍊錶都是有序的,因此相當於固定乙個鍊錶,另乙個鍊錶插入到其中。這裡只要比較兩個鍊錶中節點中值的大小即可。可以先建立乙個新的鍊錶,設定乙...