class Solution:
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
import sys
ret = ListNode(0)
pnt = ret
while True:
mini = sys.maxsize
node = None
# 遍历所有的链表
for i, l in enumerate(lists):
if l is None:
continue
if l.val < mini:
mini = l.val
node = i
# 如果node为None,说明所有的元素都已经归并结束了
if node is None:
break
pnt.next = ListNode(mini)
pnt = pnt.next
lists[node] = lists[node].next
return ret.next
class Solution:
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
class Node:
"""
存储在优先队列当中的节点
"""
def __init__(self, val, arr):
self.val = val
self.arr = arr
# 重载判断大小的比较函数
def __lt__(self, other):
return self.val < other.val
import heapq
arr = []
# 将所有链表插入优先队列当中
for l in lists:
if l is not None:
heapq.heappush(arr, Node(l.val, l.next))
ret = ListNode(0)
pnt = ret
while len(arr) > 0:
# 从优先队列头部获取元素,需要注意,pop之后元素会从队列中删除
node = heapq.heappop(arr)
val, l = node.val, node.arr
pnt.next = ListNode(val)
pnt = pnt.next
# 获取完头部元素之后,将剩下的链表插入回队列当中
if l is not None:
heapq.heappush(arr, Node(l.val, l.next))
return ret.next