給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。
請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。
遍歷所有鍊錶將節點值加入列表中,
對列表進行公升序
根據列表建立新的鍊錶
# 將所有鍊錶元素新增至列表中,然後對列表進行排序,然後基於列表建立鍊錶,
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...