核心思路:优先队列
知识点:优先队列
优先队列即PriorityQueue,是一种内置的机遇堆排序的容器,分为大顶堆与小顶堆,大顶堆的堆顶为最大元素,其余更小的元素在堆下方,小顶堆与其刚好相反。且因为容器内部的次序基于堆排序,因此每次插入元素时间复杂度都是O(log2n),而每次取出堆顶元素都是直接取出。
import java.util.*;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
Queue<ListNode> queue = new PriorityQueue<>(new Comparator<ListNode>(){
@Override
public int compare(ListNode l1, ListNode l2){
return l1.val - l2.val;
}
});
for(int i = 0; i < lists.size(); i++){
if(lists.get(i) != null){
queue.add(lists.get(i));
}
}
ListNode head = new ListNode(-1);
ListNode head1 = head;
while(!queue.isEmpty()){
ListNode cur = queue.poll();
head.next = cur;
head = head.next;
if(cur.next != null){
queue.add(cur.next);
}
}
return head1.next;
}
}