合併n個已排序的鍊錶

2021-08-03 23:18:28 字數 1403 閱讀 4564

merge k sorted lists

example 1

input:

[ 3->5->8,

2->11>12,

4->8,

]output:

2->3->4->5->8->8->11->12

參照本人之前已發表的《合併兩個已排序的鍊錶》,只需要將此演算法應用n-1次即可得到新鍊錶。

# definition for singly-linked list.

class

listnode

(object):

def__init__

(self, x):

self.val = x

self.next = none

def__cmp__

(self, other):

return self.val <= other

class

solution

(object):

defmergeklists_new

(self, links):

""" :type links: list[listnode]

:rtype: listnode

"""head = none

for i in links:

head = self.mergetwolists(head, i)

return head

# 為了方便閱讀,給出之前的**

# from mergetwolists,《合併兩個已排序鍊錶》的**

defmergetwolists

(self, l1, l2):

""" :type l1: listnode

:type l2: listnode

:rtype: listnode

"""ifnone

in (l1, l2):

return l1 or l2

head = tail = l1 if l1.val <= l2.val else l2

a = l1 if l1.val > l2.val else l1.next

b = l2 if l1.val <= l2.val else l2.next

while a and b:

if a.val <= b.val:

tail.next = a

tail, a = tail.next, a.next

else:

tail.next = b

tail, b = tail.next, b.next

tail.next = a or b

return head

兩個已排序鍊錶的合併

1 typedef struct nodenode,linklist 5 void merge linklist la,linklist lb,linklist lc 6 9 if lb 10 node p 11 12 確定最大值在la上,還是lb上 13 if la.data lb.data 14...

合併兩個已排序的鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使得新煉表中的結點仍然按照順序排序 分析 這個問題一出來,馬上就可以想到遞迴的思想,這種思想在鍊錶以及樹的操作中相當常見,在本題中主要涉及的還是鍊錶中值得比較,比較出較小的結點就插入新的鍊錶中,然後再比較下乙個結點,直接上 就一目了然了。public s...

NC51 合併k個已排序的鍊錶

知識點 歸併 最小堆 題目鏈結 題目描述 合併 k 個已排序的鍊錶並將其作為乙個已排序的鍊錶返回。分析並描述其複雜度。輸入 輸出 解題思路 歸併排序 注意返回值 最小堆,注意在合併的時候 需要把鍊錶的下乙個結點也放進去 include cheader.h struct listnode 1.歸併排序...