Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
public class Solution {
public ListNode merge(ListNode la, ListNode lb){
if(la == null) return lb;
if(lb == null) return la;
ListNode head = new ListNode(0);
ListNode pre = head;
while(la != null && lb != null){
if(la.val < lb.val){
pre.next = la;
pre = la;
la = la.next;
}
else{
pre.next = lb;
pre = lb;
lb = lb.next;
}
}
if(la == null) pre.next = lb;
if(lb == null) pre.next = la;
head = head.next;
return head;
}
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists == null || lists.size()==0) return null;
ListNode p = null;
Iterator<ListNode> it = lists.iterator();
while(it.hasNext()){
ListNode t = it.next();
p = merge(p, t);
}
return p;
}
}