合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。
数据范围:节点总数 0≤𝑛≤5000,每个节点的val满足 ∣𝑣𝑎𝑙∣<=1000
要求:时间复杂度 𝑂(𝑛𝑙𝑜𝑔𝑛)
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2){//两个链表合并
if (list1==null)
return list2;
if(list2==null)
return list1;
ListNode head=new ListNode(0);
ListNode cur=head;
while(list1 !=null && list2 !=null){
if(list1.val<=list2.val){
cur.next=list1;
list1=list1.next;
}else{
cur.next=list2;
list2=list2.next;
}
cur=cur.next;
}
if(list1!=null)
cur.next=list1;
else
cur.next=list2;
return head.next;
}
//划分合并区间函数
ListNode divideMerge(ArrayList<ListNode> lists,int left,int right){
if(left>right)
return null;
else if(left==right)
return lists.get(left);
int mid=(left+right)/2;
return Merge(divideMerge(lists,left,mid),divideMerge(lists,mid+1,right));
}
public ListNode mergeKLists (ArrayList<ListNode> lists) {
return divideMerge(lists,0,lists.size()-1);
}
}