合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
思路:用比较器生成小顶堆 priorityqueue
先把每个链表的头结点加入 然后弹出一个这个的原链表的下一个
class Solution {
public class Acomp implements Comparator<ListNode>{
public int compare(ListNode o1,ListNode o2){
return o1.val-o2.val;
}
}
public ListNode mergeKLists(ListNode[] lists) {
if(lists==null||lists.length==0)
return null;
int n=lists.length;
PriorityQueue<ListNode> heap=new PriorityQueue<ListNode>(new Acomp());
for(int i=0;i<n;i++){
if(lists[i]!=null)
heap.offer(lists[i]);
}
ListNode head=heap.poll();
if(head!=null&&head.next!=null)
heap.offer(head.next);
ListNode pre=head;
while(!heap.isEmpty()){
ListNode cur=heap.poll();
if(cur.next!=null)
heap.offer(cur.next);
pre.next=cur;
pre=cur;
}
return head;
}
}