/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length == 0) return null;
//虚拟头节点
ListNode dummy = new ListNode(-1);
ListNode p =dummy;
//优先队列创建最小堆
PriorityQueue<ListNode> pq = new PriorityQueue<>(
lists.length,(a,b)->(a.val-b.val)
);
for(ListNode head :lists){
if (head != null){
pq.add(head);
}
}
while(!pq.isEmpty()){
//获取最小节点,接到结果列表中
ListNode node = pq.poll();
p.next = node;
if(node.next != null){
pq.add(node.next);
}
//p指针不断前进
p = p.next;
}
return dummy.next;
}
}