Merge k sorted linked lists and return it as one sorted list.
public ListNode mergeKLists(ListNode[] lists) {
if (lists == null || lists.length == 0) {
return null;
}
Queue<ListNode> queue = new PriorityQueue<ListNode>(lists.length, new Comparator<ListNode>() {
@Override
public int compare(ListNode o1, ListNode o2) {
// TODO Auto-generated method stub
if (o1.val > o2.val) {
return 1;
} else if (o1.val == o2.val) {
return 0;
} else {
return -1;
}
}
});
for (ListNode listNode : lists) {
if (listNode != null) {
queue.add(listNode);
}
}
ListNode head = new ListNode(-1);
ListNode cur = head;
while (!queue.isEmpty()) {
cur.next = queue.poll();
cur = cur.next;
if (cur.next != null) {
queue.add(cur.next);
}
}
return head.next;
}