greatLong

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 }

 

分类:

技术点:

相关文章: