leetcode 合併K個公升序鍊錶 23

2022-10-08 20:03:18 字數 1505 閱讀 6973

給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。

請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。

遍歷所有鍊錶將節點值加入列表中,

對列表進行公升序

根據列表建立新的鍊錶

# 將所有鍊錶元素新增至列表中,然後對列表進行排序,然後基於列表建立鍊錶,

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

# 建立虛擬節點

dummy = listnode(-1)

p = dummy

nums =

for l in lists:

while l:

l = l.next

for i in sorted(nums):

p.next = listnode(nums[i])

p = p.next

return dummy.next

建立虛擬頭節點(dummy)

建立優先佇列,將所有鍊錶的頭節點加入優先佇列中

若佇列不為空:

取出佇列中節點值最小的節點node,根據節點值建立新節點,並鏈結到頭節點後

移動節點p指向當前節點node,node指向下乙個節點

將node的下乙個節點加入優先佇列中。

# 導包

from queue import priorityqueue

# 建立優先佇列

q = priorityqueue()

# 新增元素

q.put((node.val,idx,node))

# 取元素

node.val,idx,node = q.get()

# 使用優先佇列

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

# 建立虛擬節點

head = p = listnode(-1)

q = priorityqueue()

# 將各個鍊錶的頭節點新增到佇列中

for i,node in enumerate(lists):

if node:

q.put((node.val,i,node))

while not q.empty():

val,idx,node = q.get()

p.next = listnode(val)

p = p.next

node = node.next

if node:

q.put((node.val,idx,node))

return head.next

LeetCode 合併K個公升序鍊錶

原題鏈結 23.合併k個公升序鍊錶 給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。示例 1 輸入 lists 1,4,5 1,3,4 2,6 輸出 1,1,2,3,4,4,5,6 解釋 鍊錶陣列如下 1 4 5,1 3 4,2 6 將它們合併到...

leetcode 困難 合併k個公升序鍊錶

思路一 鍊錶逐個兩兩合併 超時了 參考 leetcode 簡單 21 合併兩個有序鍊錶 definition for singly linked list.class listnode def init self,val 0,next none self.val val self.next next...

Leetcode 合併K個公升序鍊錶問題

題目 給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。示例 1 輸入 lists 1,4,5 1,3,4 2,6 輸出 1,1,2,3,4,4,5,6 解釋 鍊錶陣列如下 1 4 5,1 3 4,2 6 將它們合併到乙個有序鍊錶中得到。1 1 2...