Leetcode 23. Merge k Sorted Lists
You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
Example 1:
Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
1->4->5,
1->3->4,
2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
PriorityQueue<ListNode> heap = new PriorityQueue<>((o1, o2) -> o1.val - o2.val);
for (ListNode head:lists) {
if (head!=null){
heap.offer(head);
}
}
ListNode pre=new ListNode(-1);
ListNode tmp=pre;
while (!heap.isEmpty()){
ListNode curr = heap.poll();
tmp.next=new ListNode(curr.val);
if (curr.next != null){
heap.offer(curr.next); //move pointer a step forward
}
tmp=tmp.next;
}
return pre.next;
}
}