合并 K 个升序链表 (LeetCode 23)

速度:
准备就绪...
结果链表

Python 算法逻辑 (最小堆)

import heapq
def mergeKLists(lists):
min_heap = []
# 1. 将所有链表的头节点放入堆中
for i, l in enumerate(lists):
if l:
heapq.heappush(min_heap, (l.val, i, l))
dummy = ListNode(0)
curr = dummy
# 2. 循环直到堆为空
while min_heap:
# 3. 取出最小值 (堆顶)
val, i, node = heapq.heappop(min_heap)
# 4. 加入结果链表
curr.next = node
curr = curr.next
# 5. 如果被取出的节点还有下一个,放入堆中
if node.next:
heapq.heappush(min_heap, (node.next.val, i, node.next))
return dummy.next

逻辑说明:

1. 我们维护一个“最小堆”(在演示中体现为只看每行的第一个元素)。

2. 每次只比较所有链表当前的头节点。

3. 选出最小的,移到结果链表。

4. 将被选节点的下一个节点加入比较池。