使用递归,直接搞定,空间使用小
class Solution {
public:
ListNode *l0=new(ListNode);
ListNode *l=l0;
ListNode* mergeKLists(vector<ListNode*>& lists) {
del(lists);
// cout<<lists.size()<<endl;
if(lists.empty())
{
return NULL;
}
cure(lists);
return l;
}
//递归删除空的
void del(vector<ListNode*>& lists)
{
for(int i=0;i<lists.size();i++)
{
if(lists[i]==NULL)
{
lists.erase(lists.begin()+i);
del(lists);
break;
}
}
}
//递归将每个排序
void cure(vector<ListNode*>& lists)
{
int min=INT_MAX;
if(lists.empty())
{
return;
}
int j=0;
for(int i=0;i<lists.size();i++)
{
if(lists[i]->val<=min)
{
min=lists[i]->val;
j=i;
}
}
l0->val=lists[j]->val;
if(lists[j]->next==NULL)
{
if(lists.size()==1)
{
l0->next=NULL;
}
else
{
l0->next=lists[j];
l0=lists[j];
}
lists.erase(lists.begin()+j);
}
else
{
l0->next=lists[j];
l0=lists[j];
lists[j]=lists[j]->next;
}
cure(lists);
}
};