image.png

优先队列

image.png

  1. public ListNode mergeKLists(ListNode[] lists) {
  2. if(lists==null||lists.length==0)
  3. return null;
  4. PriorityQueue<ListNode> queue = new PriorityQueue<ListNode>(lists.length,new Comparator<ListNode>(){
  5. @Override
  6. public int compare(ListNode o1,ListNode o2){
  7. if(o1.val<o2.val)
  8. return -1;
  9. else if(o1.val==o2.val)
  10. return 0;
  11. else
  12. return 1;
  13. }
  14. });
  15. ListNode dummy = new ListNode(0);
  16. ListNode tail = dummy;
  17. for(ListNode node:lists)
  18. if(node!=null)
  19. queue.add(node);
  20. while(!queue.isEmpty()){
  21. tail.next = queue.poll();
  22. tail = tail.next;
  23. if(tail.next!=null)
  24. queue.add(tail.next);
  25. }
  26. return dummy.next;
  27. }