合併兩個有序鍊錶,返回乙個新鍊錶。即合併排序。
示例:input: 1->2->4, 1->3->4
output: 1->1->2->3->4->4
定義兩個指標,分別指向兩個鍊錶的head。定義乙個空的新鍊錶。
然後依次取出指標值,比較大小,將較小值追加到新鍊錶,同時將較小值所在鍊錶的指標往後移動一位。
如果其中乙個指標到頭了,那麼將另乙個指標剩下的鍊錶直接追加到新鍊錶即可。
直至兩個指標都指到了最後一位。
這時候,新煉錶即為合併後的鍊錶。
class
listnode
:def
__init__
(self, x):if
isinstance
(x,list):
self.val = x[0]
self.
next
=none
head = self
for i in
range(1
,len
(x))
: head.
next
= listnode(x[i]
) head = head.
next
else
: self.val = x
self.
next
=none
defoutput
(self)
:'''
輸出鍊錶
'''result =
str(self.val)
head = self.
next
while
(head is
notnone):
result += f' -> '
head = head.
next
return
'('+ result +
')'def
mergetwolists
(l1, l2)
:"""
:type l1: listnode
:type l2: listnode
:rtype: listnode
歸併排序。
"""ifnot l1:
return l2
ifnot l2:
return l1
p1 = l1
p2 = l2
head = listnode(0)
p = head
while
(p1 and p2)
:if p1.val < p2.val:
p.next
= listnode(p1.val)
p1 = p1.
next
else
: p.
next
= listnode(p2.val)
p2 = p2.
next
p = p.
next
if p1:
p.next
= p1
elif p2:
p.next
= p2
return head.
next
if'__main__'
== __name__:
l1 = listnode([1
,2,3
])l2 = listnode([1
,3,4
])print
(mergetwolists(l1,l2)
.output(
))
leetcode演算法 21 合併兩個有序鍊錶
所有題目源 git位址 題目將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4方案 基本鍊錶操作,比大小,注意特殊情況 即可class solution if l2 null 第乙個節點 i...
leetcode21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 思路 每次判斷兩個鍊錶的頭部小的數值,訪問小的,並讓該鍊錶往後移動。注意 注意鍊錶走完,為空的情況即可。遇到的問題 一開始不太理解鍊錶,返回e...
LEETCODE 21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4c 第一遍將 相等 的這個else分支寫錯了,主要錯誤在於,next指標指向下乙個的這條語句寫到了後面,導致節點自己指向自己,造成了超時錯誤 執...