23. 合并K个排序链表
难度:
困难
描述:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode resHead = null;
ListNode resCursor = null;
PriorityQueue<ListNode> queue = new PriorityQueue<>(Comparator.comparingInt(node -> node.val));
for (ListNode list : lists) {
if (list != null) {
queue.add(list);
}
}
while (!queue.isEmpty()) {
ListNode minNode = queue.poll();
if (minNode == null) {
break;
}
if (resHead == null) {
resHead = minNode;
resCursor = resHead;
} else {
resCursor.next = minNode;
resCursor = resCursor.next;
}
ListNode curNode = minNode.next;
if (curNode != null) {
queue.offer(curNode);
}
resCursor.next = null;
}
return resHead;
}
}