LeetCode-23-合并k个排序链表
题目
合并 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 }