合併有序鍊錶

2022-08-10 06:06:13 字數 1603 閱讀 9142

21. 合併兩個有序鍊錶

難度簡單912收藏分享切換為英文關注反饋

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

示例:

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

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

class solution:

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

l3 = listnode(-1)

new = l3

while l1 and l2:

if l1.val < l2.val:

new.next = l1

l1 = l1.next

else:

new.next = l2

l2 = l2.next

new = new.next

new.next = l1 if l1 is not none else l2

return l3.next

23. 合併k個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:

輸入:

[ 1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

#兩兩合併,分治

class solution:

def mergeklists(self, lists: list[listnode]) -> listnode:

#兩兩合併,分治

if not lists:

return none

start,end = 0,len(lists)-1

return self.merge(lists,start,end)

def merge(self,lists,start,end):

if start == end:

return lists[start]

mid = start+(end-start)//2

l1 = self.merge(lists,start,mid)

l2 = self.merge(lists,mid+1,end)

return self.merge2list(l1,l2)

def merge2list(self,l1,l2):

l3 = listnode(-1)

new = l3

while l1 and l2:

if l1.val < l2.val:

new.next = l1

l1 = l1.next

else:

new.next = l2

l2 = l2.next

new = new.next

new.next = l1 if l1 is not none else l2

return l3.next

合併有序鍊錶

將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的,即不開闢新的記憶體空間 首先,為了方便操作鍊錶,我們定義乙個dummyhead,我們遍歷兩個鍊錶,直到其中有乙個到達尾部,則停下來 在遍歷的過程中,我們將元素值小的節點依次鏈在mergerlist的後邊,最後,我們看看哪...

合併有序鍊錶

題目描述將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的。塊 listnode mergetwolists listnode l1,listnode l2 if l2 null if l1 val l2 val else listnode pre target list...

鍊錶 合併有序鍊錶

題目 將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 題解我們這裡利用到了乙個前哨節點,因為兩個鍊錶實際上是已經排好序了,所以我們只需要比較兩個節點誰大誰小,找到小的接上去,然後那個...