23. Merge k Sorted Lists
要点:
1. 学会数据结构PriorityQueue(优先队列)的用法, 通过给优先队列传入自定义的经过复写compare方法的比较器实现大根堆或者小根堆。
2. PriorityQueue中不能存放null值,所以每次更新优先队列都需要作判空检查,如遇null值直接剔除。
1 import java.util.Comparator;
2 import java.util.PriorityQueue; 3 4 class Solution { 5 public ListNode mergeKLists(ListNode[] lists) { 6 //要点1 7 PriorityQueue<ListNode> nodesQueue = new PriorityQueue<>(new Comparator<ListNode>() { 8 @Override
//将compare方法重写为比较ListNode的val值大小 9 public int compare(ListNode o1, ListNode o2) { 10 return o1.val-o2.val; 11 } 12 }); 13 14 ListNode head = new ListNode(0); 15 for(ListNode node:lists) 16 if(node!=null) 17 nodesQueue.add(node); 18 19 ListNode p = head;
20 while(!nodesQueue.isEmpty()){
//判空检查,如果ListNode的下一个Node是null,则取出该Node后不再将其下一个节点放回优先队列。 21 if(nodesQueue.peek().next==null){ 22 p.next = new ListNode(nodesQueue.poll().val); 23 p = p.next; 24 }else{ 25 ListNode tmp = nodesQueue.poll(); 26 p.next = new ListNode(tmp.val); 27 p = p.next; 28 nodesQueue.add(tmp.next); 29 } 30 } 31 return head.next; 32 } 33 34 }