21 合併兩個有序鍊錶

2022-06-22 05:30:15 字數 1253 閱讀 1013

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

輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

借助原本鍊錶有序,從頭開始比較原有兩個鍊錶,將值較小鍊錶(記為鍊錶 l )的節點插入新煉表中,同時移動 l 的指標後移,重複這個過程,直到有乙個原鍊錶全部插入到新鍊錶中。

因為原有兩個鍊錶有序,剩下的那個鍊錶就直接接在新鍊錶尾部即可。

class solution:

def mergetwolists(self, l1, l2):

""":type l1: listnode

:type l2: listnode

:rtype: listnode

"""ret = l3 = listnode(-1)

while l1 and l2:

if l1.val < l2.val:

l3.next = l1

l1 = l1.next

else:

l3.next = l2

l2 = l2.next

# 值較小的接在目標鏈結後並將新鍊錶指標後移

l3 = l3.next

if l1:

l3.next = l1

if l2:

l3.next = l2

return ret.next

可以採用遞迴的思路,鍊錶指標往後移動依舊可以看做是乙個鍊錶,所以可以反覆呼叫這個方法,只需將引數改成該鍊錶除去當前節點的鍊錶和另乙個沒有改動的鍊錶即可。

此方法比上面那種效率要高。

class solution:

def mergetwolists(self, l1, l2):

""":type l1: listnode

:type l2: listnode

:rtype: listnode

"""if not l1 or not l2:

return l1 or l2

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