Merge k Sorted Lists (Min-Heap)

用小根堆合并 k 个有序链表:每次弹出最小节点并推进。

#resource / algorithm #type / howto #status / evergreen #ds / heap #ds / linked-list #source / leetcode

[!info] related notes 算法面试题型 MOC 堆常见题

Merge k Sorted Lists (Min-Heap)

LeetCode: https://leetcode.cn/problems/merge-k-sorted-lists/

思路

  • 用小根堆(优先队列)按节点值排序。
  • 先把每条链表的头节点入堆。
  • 循环:弹出最小节点接到结果链表尾部;如果它有 next,把 next 入堆。

复杂度:

  • 总节点数 N,链表数 k
  • 时间:O(N log k)
  • 空间:O(k)

Java Template

import java.util.*;

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        PriorityQueue<ListNode> heap = new PriorityQueue<>((a, b) -> a.val - b.val);
        for (ListNode head : lists) {
            if (head != null) heap.add(head);
        }
        ListNode dummy = new ListNode(0);
        ListNode tail = dummy;
        while (!heap.isEmpty()) {
            ListNode cur = heap.poll();
            tail.next = cur;
            tail = cur;
            if (cur.next != null) heap.add(cur.next);
        }
        tail.next = null;
        return dummy.next;
    }
}
创建于 2026/3/16 更新于 2026/5/27