1.暴力 通过128/137个样例,最终超时
当lists为空时,输出NULL即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void merge(vector<ListNode*>& list,int s,int e){
//合并两个链表
ListNode* templ=new ListNode(-1);
ListNode* l1=list[s];
ListNode* l2=list[e];
ListNode* ans=templ;
while(l1!=NULL&&l2!=NULL){
cout<<l1->val<<" "<<l2->val<<endl;
if(l1->val<l2->val){
ListNode* temp= new ListNode(l1->val);
templ->next=temp;
l1=l1->next;
templ=templ->next;
cout<<templ->val<<endl;
}else{
ListNode* temp= new ListNode(l2->val);
templ->next=temp;
l2=l2->next;
templ=templ->next;
cout<<templ->val<<endl;
}
}
while(l1!=NULL){
ListNode* temp= new ListNode(l1->val);
templ->next=temp;
l1=l1->next;
templ=templ->next;
cout<<templ->val<<endl;
}
while(l2!=NULL){
ListNode* temp= new ListNode(l2->val);
templ->next=temp;
l2=l2->next;
templ=templ->next;
cout<<templ->val<<endl;
}
list[s]=ans->next;
}
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size()==0)return NULL ;
if(lists.size()==1)return lists[0];
else{
cout<<lists.size()<<endl;
for(int i=lists.size()-2;i>=0;i--){
merge(lists,i,i+1);
}
return lists[0];
}
}
};
2.优先队列法