方法一(暴力求解)
实现思路
依次合并两个相连的链表
时间复杂度
方法二(利用STL)
实现思路
实现代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
bool cmp(const ListNode *n1,const ListNode *n2){
return (n1->val)<(n2->val);
}
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size()==0) return nullptr;
vector<ListNode*> all;
for(int i=0;i<lists.size();i++){
ListNode *head=lists[i];
while(head!=nullptr){
all.push_back(head);
head=head->next;
}
}
if(all.size()==0) return nullptr;
sort(all.begin(),all.end(),cmp);
for(int i=0;i<all.size()-1;i++){
all[i]->next=all[i+1];
}
all[all.size()-1]->next=nullptr;
return all[0];
}
};
提交结果及分析
由于logkN是小于k的,所以kNlogkN肯定是比k^2N要小的