- 合并K个升序链表
问题描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。
- 合并k个有序链表,与合并两个有序列表类似,但是难点在于如何快速得到k个链表中的最小节点。
- 为了快速得到k个链表中的最小节点,可以使用优先级队列
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists.length == 0) {
return null;
}
ListNode dummy = new ListNode(-1);
ListNode p = dummy;
PriorityQueue<ListNode> priorityQueue = new PriorityQueue<>(
lists.length, (a, b) -> a.val - b.val
);
for (ListNode head : lists) {
if (head != null) {
priorityQueue.offer(head);
}
}
while(!priorityQueue.isEmpty()) {
ListNode node = priorityQueue.poll();
p.next = node;
if (node.next != null) {
priorityQueue.offer(node.next);
}
p = p.next;
}
return dummy.next;
}
}