LeetCode-23-合并k个排序链表

题目

合并 个排序链表,返回合并后的排序链表。

示例

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

 

思路

借助小根堆进行,循环将数组中所有节点入堆,重写compare方法,再依次弹出创建返回的链表。

 1 public ListNode mergeKLists(ListNode[] lists) {
 2 
 3         if(lists == null || lists.length==0) return null;
 4 
 5         PriorityQueue<ListNode> priorityQueue = new PriorityQueue<ListNode>(new Comparator<ListNode>() {
 6 
 7             @Override
 8             public int compare(ListNode o1, ListNode o2) {
 9                 // TODO Auto-generated method stub
10                 return o1.val - o2.val;
11             }
12             
13             
14         });
15         
16         for(int i=0;i<lists.length;i++) {
17             
18             while (lists[i] != null) {
19                 
20                 priorityQueue.add(lists[i]);
21                 lists[i] = lists[i].next;
22                 
23             }
24             
25         }
26         ListNode dummy = new ListNode(-1);
27         ListNode head = dummy;
28         //从堆中不断取出元素,并将取出的元素串联起来
29         while( !priorityQueue.isEmpty() ) {
30             dummy.next = priorityQueue.poll();
31             dummy = dummy.next;
32         }
33         dummy.next = null;
34         return head.next;
35 
36 
37     }

 

posted @ 2020-07-27 15:35  垫底研究生小莫  阅读(69)  评论(0编辑  收藏  举报