pta兩個有序鍊錶的合併 21 合併兩個有序鍊錶

2021-10-12 21:13:54 字數 1674 閱讀 7310

分別遍歷兩個鍊錶,把數放到列表中,運用sort方法。再用尾插法,遍歷列表,建立新的有序鍊錶。

class solution:

def mergetwolists(self, l1:listnode, l2:listnode) -> listnode:

sum =

def list2num(node):

while node != none:

node = node.next

list2num(l1)

list2num(l2)

sum.sort()

dummy_node = listnode(-1)

start_node = dummy_node

for i in sum:

new = listnode(i)

dummy_node.next = new

dummy_node = new

return start_node.next

時間複雜度 o(m+n) 每次遞迴呼叫都會去掉l1 或 l2 的頭結點,至多會遞迴呼叫每個節點一次。

因此,時間複雜度取決於合併後的鍊錶長度。

2. 空間複雜度 o(m+n) 至多呼叫函式 mergetwolists (m+n)次,每次呼叫需要消耗棧空間。

因此,空間複雜度為o(m+n)

class solution:

def mergetwolists(self, l1:listnode, l2:listnode) -> listnode:

if l1 == none:

return l2

elif l2 == none:

return l1

elif(l1.val < l2.val):

l1.next = self.mergetwolists(l1.next, l2)

return l1

else:

l2.next = self.mergetwolists(l1, l2.next)

return l2

先設立哨兵節點,為了好返回生成的鍊錶

用兩個指標分別遍歷兩個鍊錶,直到一方為空。

遍歷的過程中,比較兩指標指向節點的大小,然後尾插法插入哨兵節點的next。

直到一方為空,再把剩餘不為空的鍊錶插入。

class solution:

def mergetwolists(self, l1:listnode, l2:listnode) -> listnode:

dummy_node = listnode(-1)

start_node = dummy_node

while l1 and l2:

if l1.val < l2.val:

dummy_node.next = l1

l1 = l1.next

else:

dummy_node.next = l2

l2 = l2.next

dummy_node = dummy_node.next

return start_node.next

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