21:合并多个有序链表
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。

import java.util.Comparator;
import java.util.PriorityQueue;
// 合并 K 个升序链表
public class MergeKSortedLists {
public static class ListNode {
public int val;
public ListNode next;
}
public ListNode mergeKLists(ListNode[] lists) {
if(lists == null) {
return null;
}
PriorityQueue<ListNode> heap = new PriorityQueue<>(new Comparator<ListNode>() {
// 节点值小的放在前面
@Override
public int compare(ListNode o1, ListNode o2) {
return o1.val - o2.val;
}
});
// 所有链表的头节点入堆
for (int i = 0; i < lists.length; i++) {
if(lists[i] != null) {
heap.add(lists[i]);
}
}
// 当所有都节点都是空的时候
if(heap.isEmpty()) {
return null;
}
ListNode head = heap.poll();
ListNode cur = head;
while(!heap.isEmpty()) {
if(cur.next != null) {
heap.add(cur.next);
}
ListNode node = heap.poll();
cur.next = node;
cur = node;
}
return head;
}
}

2005

被折叠的 条评论
为什么被折叠?



