You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
package class06;
|
|
|
|
|
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
import java.util.PriorityQueue;
|
|
|
|
|
|
|
|
|
|
// 测试链接:https://leetcode.com/problems/merge-k-sorted-lists/
|
|
|
|
|
public class Code01_MergeKSortedLists {
|
|
|
|
|
|
|
|
|
|
public static class ListNode {
|
|
|
|
|
public int val;
|
|
|
|
|
public ListNode next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static class ListNodeComparator implements Comparator<ListNode> {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int compare(ListNode o1, ListNode o2) {
|
|
|
|
|
return o1.val - o2.val;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static ListNode mergeKLists(ListNode[] lists) {
|
|
|
|
|
if (lists == null) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
PriorityQueue<ListNode> heap = new PriorityQueue<>(new ListNodeComparator());
|
|
|
|
|
for (int i = 0; i < lists.length; i++) {
|
|
|
|
|
if (lists[i] != null) {
|
|
|
|
|
heap.add(lists[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (heap.isEmpty()) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
ListNode head = heap.poll();
|
|
|
|
|
ListNode pre = head;
|
|
|
|
|
if (pre.next != null) {
|
|
|
|
|
heap.add(pre.next);
|
|
|
|
|
}
|
|
|
|
|
while (!heap.isEmpty()) {
|
|
|
|
|
ListNode cur = heap.poll();
|
|
|
|
|
pre.next = cur;
|
|
|
|
|
pre = cur;
|
|
|
|
|
if (cur.next != null) {
|
|
|
|
|
heap.add(cur.next);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return head;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|