Solution 1:结合21题+Divide&Conquer
用公式套就是这个
T(n)=2T(n/2)+O(n)
https://blog.youkuaiyun.com/demon24/article/details/8468761
直观来想的话,就是答案给的这种
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length==0||lists==null)return null;
int left=0;
int right=lists.length-1;
return divide(lists,left,right);
}
private ListNode divide(ListNode[] lists, int left, int right){
if(left==right) return lists[left];
int mid=(left+right)/2;
ListNode leftNode=divide(lists,left,mid);
ListNode rightNode=divide(lists,mid+1,right);
return mergeList(leftNode,rightNode);
}
private ListNode mergeList(ListNode l1,ListNode l2){
ListNode p=l1;
ListNode q=l2;
ListNode t=new ListNode(-1);
t.next=null;
l1=t;
while(p!=null&&q!=null){
if(p.val<=q.val){
t.next=p;
t=t.next;
p=p.next;
}
else{
t.next=q;
t=t.next;
q=q.next;
}
}
if(q==null){
t.next=p;
}
else{
t.next=q;
}
return l1.next;
}
}