合并 k 个排序链表,返回合并后的排序链表
private ListNode mergeKLists(ListNode[] lists) {
if(lists==null||lists.length==0)return null;
return mergeKLists(lists,0,lists.length-1);
}
private ListNode mergeKLists(ListNode[] lists,int low,int high) {
if(low<high){
int mid = (low+high)/2;
return mergeTwoLists(mergeKLists(lists,low,mid),mergeKLists(lists,mid+1,high));
}
return lists[low];
}
private ListNode mergeTwoLists(ListNode l1,ListNode l2){
if(l1==null&&l2==null)return null;
if(l1==null&&l2!=null)return l2;
if(l1!=null&l2==null)return l1;
ListNode result = null;
if(l1.val<l2.val){
result = l1;
l1 = l1.next;
}else{
result = l2;
l2 = l2.next;
}
ListNode tail = result;
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
tail.next = l1;
tail = l1;
l1 = l1.next;
}else{
tail.next = l2;
tail = l2;
l2 = l2.next;
}
}
//可能还有一个链表非空
while(l1!=null){
tail.next = l1;
tail = l1;
l1 = l1.next;
}
while(l2!=null){
tail.next = l2;
tail = l2;
l2 = l2.next;
}
return result;
}