merge的返回值,当left>=right,则说明全都有序,此时只需要返回list.get(low)
即可。
/**
* 合并k个已排序的链表并将其作为一个已排序的链表返回。
* 分析并描述其复杂度。---熟悉mergeSort,返回值不同!!当low>=high,则说明有序,直接返回lists.get(low)
* @param lists k个已排序的链表
* @return 一个已排序的链表
*/
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists==null||lists.size()==0){
return null;
}
return mergeKLists(lists,0,lists.size()-1);
}
public ListNode mergeKLists(ArrayList<ListNode> lists,int low,int high){
if(low>=high){
return lists.get(low);
}
int mid=low+(high-low)/2;
ListNode l1=mergeKLists(lists,low,mid);
ListNode l2=mergeKLists(lists,mid+1,high);
return merge(l1,l2);
}
public ListNode merge(ListNode l1,ListNode l2){
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
if(l1.val<l2.val){
l1.next=merge(l1.next,l2);
return l1;
}else{
l2.next=merge(l1,l2.next);
return l2;
}
}