將兩個公升序鍊錶
合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
輸入:l1 = [1,2,4], l2 = [1,3,4]輸出:[1,1,2,3,4,4]
輸入:l1 = , l2 =輸出:
輸入:l1 = , l2 = [0]因為leetcode伺服器上已經封裝了鍊錶類,在本地測試時我需要自己來實現鍊錶類,**如下輸出:[0]
class
listnode
:def
__init__
(self, val,
next
=none):
ifisinstance
(val,
int)
: self.val = val
self.
next
=next
elif
isinstance
(val,
list):
self.val = val[0]
self.
next
=none
head = self
for i in
range(1
,len
(val)):
node = listnode(val[i]
,none
) head.
next
= node
head = head.
next
遞迴法的思路比較簡單,我們需要先判斷鍊錶l1
和鍊錶l2
是否為空,如果為空直接返回另乙個鍊錶即可就不需要進行比較了。如果不為空,我們就需要比較鍊錶節點的值誰的更大,如果l1大於l2
我們就更改鍊錶l2的下乙個節點,然後再比較l2的下乙個節點和l1,反之可得另一種情況的處理方法。
class
solution
:def
mergetwolists
(self, l1: listnode, l2: listnode)
-> listnode:
#如果鍊錶l1為none直接返回鍊錶l2即可
if l1 is
none
:return l2
#如果鍊錶l2為none直接返回鍊錶l1即可
elif l2 is
none
:return l1
#如果鍊錶l1大於鍊錶l2
elif l1.val > l2.val:
#更改鍊錶l2下乙個節點的指向
l2.next
= self.mergetwolists(l1,l2.
next
)return l2
else
:#更改鍊錶l1下乙個節點的指向
l1.next
= self.mergetwolists(l1.
next
,l2)
return l1
l1 = listnode([1
,2,4
])l2 = listnode([1
,3,4
])s = solution(
)l = s.mergetwolists(l1,l2)
while l:
print
(l.val)
l = l.
next
這個演算法更簡單了,我們只需要遍歷鍊錶l1和l2然後再比較大小即可,對於最後沒遍歷完的部分,直接追加到合併鍊錶的後面即可。
class
solution
:def
mergetwolists
(self, l1: listnode, l2: listnode)
-> listnode:
#用來合併鍊錶
prehead = listnode(-1
)#建立乙個哨兵節點
pre = prehead
while l1 and l2:
if l1.val > l2.val:
pre.
next
= l2
l2 = l2.
next
else
: pre.
next
= l1
l1 = l1.
next
#更改哨兵節點的下乙個指向
pre = pre.
next
pre.
next
= l1 if l1 else l2
return prehead.
next
l1 = listnode([1
,2,4
])l2 = listnode([1
,3,4
])s = solution(
)l = s.mergetwolists(l1,l2)
while l:
print
(l.val)
l = l.
next
參考:合併兩個有序鍊錶 合併兩個有序列表
1.尾遞迴 1 def recursion merge sort2 l1,l2,tmp 2if len l1 0 or len l2 0 3tmp.extend l1 4tmp.extend l2 5return tmp6 else 7 if l1 0 dell1 0 10else 11 12del...
Go實現合併兩個有序列表(leetcode 21)
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 如下 definition for singly linked list.type listnode struct func mergetwo...
go合併兩個有序列表
題目 將兩個有序鍊錶合併為乙個新的有續鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點做成的。思路 1 如果給定的兩條鍊錶中有一條為空,返回另一條即可 2 若兩條鍊錶都不為空,則在兩條鍊錶中選擇較小的節點作為head,被選中的較小節點所在鍊錶的第二個節點便成了二當家帶領這條鍊錶 3 二當家帶領著...