给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

使用优先队列(小根堆),按节点的大小排序,小节点在堆顶
第一次加入全部链表的头部节点,每次弹出堆顶元素,新链表的最后一个节点为弹出元素,弹出元素cur的next节点放入堆里
public class ListNodeComparator implements Comparator<ListNode>{
public int compare(ListNode o1,ListNode o2){
return o1.val-o2.val;
}
}
public ListNode mergeKLists(ListNode[] lists) {
if(lists==null){
return null;
}
PriorityQueue<ListNode> heap=new PriorityQueue<>(new ListNodeComparator());
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 pre=head;
if(pre.next!=null){
heap.add(pre.next);
}
while(!heap.isEmpty()){
ListNode cur=heap.poll();
pre.next=cur;
pre=cur;
if(cur.next!=null){
heap.add(cur.next);
}
}
return head;
}