21 合併兩個有序鍊錶 2020 11 09

2021-10-10 09:28:25 字數 1649 閱讀 6775

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

首先很容易想到的是,用鍊錶儲存,能否用列表進行替換,將鍊錶的資料存入列表,再在列表中處理。

# 列表代換方法

ifnot l1:

return l2

ifnot l2:

return l1

list_ =

while l1:

l1 = l1.

next

while l2:

l2 = l2.

next

list_ =

sorted

(list_)

head = listnode(0)

temp = head

for i in

range(0

,len

(list_)):

temp.

next

= listnode(list_[i]

) temp = temp.

next

return head.

next

第二個方法是雙指標方法,將小的一方放入鍊錶。

# 雙指標

ifnot l1:

return l2

ifnot l2:

return l1

if l1.val <= l2.val:

head = l1

l1 = l1.

next

else

: head = l2

l2 = l2.

next

temp = head

while l1 and l2:

if l1.val <= l2.val:

temp.

next

= l1

temp = temp.

next

l1 = l1.

next

else

: temp.

next

= l2

temp = temp.

next

l2 = l2.

next

if l1:

temp.

next

= l1

if l2:

temp.

next

= l2

return head

第三個方法是遞迴,確定終止條件是兩者有乙個為空,返回另乙個。

# 遞迴

ifnot l1:

return l2

ifnot l2:

return l1

if l1.val <= l2.val:

l1.next

= self.mergetwolists(l1.

next

, l2)

return l1

else

: l2.

next

= self.mergetwolists(l1, l2.

next

)return l2

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