Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
直接brute force是O(n*K),n是节点总个数,每次取一个节点的时候都要比较K个head。
使用heap是O(n*logK),每次从heap取出是logK。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
// Start typing your Java solution below
// DO NOT write main() function
if(lists == null || lists.size() == 0)
return null;
Comparator<ListNode> comparator = new Comparator<ListNode>(){
public int compare(ListNode m, ListNode n){
if(m.val == n.val)
return 0;
else if(m.val > n.val)
return 1;
else
return -1;
}
};
PriorityQueue<ListNode> q = new PriorityQueue<ListNode>(lists.size(), comparator);
for(int i = 0; i < lists.size(); i++){
if(lists.get(i) != null)
q.add(lists.get(i));
}
ListNode head = null, cur = null;
while(!q.isEmpty()){
if(head == null){
head = q.poll();
cur = head;
}
else{
cur.next = q.poll();
cur = cur.next;
}
if(cur.next != null)
q.add(cur.next);
}
return head;
}
}