要点:
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 9 //将compare方法重写为比较ListNode的val值大小 10 public int compare(ListNode o1, ListNode o2) { 11 return o1.val-o2.val; 12 } 13 }); 14 15 ListNode head = new ListNode(0); 16 for(ListNode node:lists) 17 if(node!=null) 18 nodesQueue.add(node); 19 20 ListNode p = head; 21 while(!nodesQueue.isEmpty()){ 22 //判空检查,如果ListNode的下一个Node是null,则取出该Node后不再将其下一个节点放回优先队列。 23 if(nodesQueue.peek().next==null){ 24 p.next = new ListNode(nodesQueue.poll().val); 25 p = p.next; 26 }else{ 27 ListNode tmp = nodesQueue.poll(); 28 p.next = new ListNode(tmp.val); 29 p = p.next; 30 nodesQueue.add(tmp.next); 31 } 32 } 33 return head.next; 34 } 35 36 }
原文:https://www.cnblogs.com/greatLong/p/11369523.html