leetcode23. 合并K个排序链表

leetcode23. 合并K个排序链表

五月 23, 2020

leetcode23. 合并K个排序链表


合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

多路合并类型。把链表里面的所有元素都扔在一个堆里面,最后取出来就是有序的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public ListNode mergeKLists(ListNode[] lists) {
PriorityQueue<ListNode> queue = new PriorityQueue<>((o1, o2) -> o1.val - o2.val);
for (ListNode node : lists) {
while (node != null) {
queue.offer(node);
node = node.next;
}
}
ListNode head = queue.poll();
ListNode tmp = head;
while(!queue.isEmpty()) {
tmp.next = queue.poll();
tmp = tmp.next;
}
if (tmp != null)//输入为[],[[]]等情况
tmp.next = null;
return head;
}

题解区发现一个挺好的解法,把这个给优化了多图演示-合并k个排序链表,可以优化到Nlog(k)。
leetcode 78/100