直接使用递归即可
ListNode *merge(std::vector<ListNode*>& lists,int s,int t){
if(s==t)return lists[s];
int m=(s+t)/2;
ListNode*l=merge(lists,s,m);
ListNode*r=merge(lists,m+1,t);
ListNode*l1=new ListNode(0);
ListNode*l2=l1;
while(l!=NULL&&r!=NULL){
if(l->val<=r->val) {
l1->next = new ListNode(l->val);
l1=l1->next;
l=l->next;
}
else
{
l1->next=new ListNode(r->val);
l1=l1->next;
r=r->next;
}
}
while(l!=NULL&&r==NULL){
l1->next = new ListNode(l->val);
l1=l1->next;
l=l->next;
}
while(l==NULL&&r!=NULL){
l1->next = new ListNode(r->val);
r=r->next;
l1=l1->next;
}
return l2->next;
}
ListNode* mergeKLists(std::vector<ListNode*>& lists) {
if(lists.size()==0)return NULL;
int len=lists.size();
return merge(lists,0,len-1);
}