1. 程式人生 > 實用技巧 >LeetCode-23-合併k個排序連結串列

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 }