PriorityQueue —优先级链表
可以理解为不去重的TreeSet
- PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序。
- 该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。
- PriorityQueue 队列的头指排序规则最小那哥元素。如果多个元素都是最小值则随机选一个。
- PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[]),随着不断向优先级队列添加元素,其容量会自动扩容,无需指定容量增加策略的细节。
合并k个生序链表
import java.util.*;
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode pomml =new ListNode(0);
ListNode result=pomml;
//新建PriorityQueue 并且添加比较器
PriorityQueue<ListNode> pq=new PriorityQueue<>((l1,l2)->{return l1.val-l2.val;});
//添加各个链表的头,并且不添加null(priorityQueue添加null会报错)
for (ListNode list : lists) {
if(list!=null) pq.add(list);
}
while (!pq.isEmpty()){
//弹出值最小链表并且后移一位,并把最小链表的下一个节点加入priorityQueue
ListNode first = pq.poll();
pomml.next=first;
pomml=pomml.next;
ListNode listNode=first.next;
if(listNode!=null) pq.add(listNode);
}
return result.next;
}
}