package problems.medium;
import problems.utils.ListNode;
/**
* Created by sherxon on 1/4/17.
*/
public class MergekSortedLists {
public ListNode mergeKLists(ListNode[] a) {
if (a.length == 0) return null;
if(a.length==1)return a[0];
return sort(a, 0, a.length - 1);
}
ListNode sort(ListNode[] a, int lo, int hi) {
if (lo >= hi) return a[lo];
int mid = lo + (hi - lo) / 2;
ListNode left = sort(a, lo, mid);
ListNode right = sort(a, mid + 1, hi);
return merge(left, right);
}
ListNode merge(ListNode left, ListNode right) {
ListNode x= new ListNode(0);
ListNode xx = x;
while (left != null || right != null) {
if (left == null) {
x.next = right;
break;
} else if (right == null) {
x.next = left;
break;
}else{
if (left.val < right.val) {
x.next = left;
left = left.next;
} else {
x.next = right;
right = right.next;
}
}
x=x.next;
}
return xx.next;
}
}