Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
主要参考一下博客:
http://blog.csdn.net/kenden23/article/details/13274385
http://blog.csdn.net/a83610312/article/details/8554241
http://blog.csdn.net/a83610312/article/details/9565541
博主提出了很多方法来解决这个问题,不同解法的复杂度不同,其中用到C++泛型等高级特性,值得学习。
这个方法 Time Limit Exceeded, 但是代码看上去思路很清晰,就是将新的list与已有的进行比较,然后一个一个地插进去
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
//都是从小到大排序的。。。为什么。。。默认吗?
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
if(lists.empty())
{
return NULL;
}
ListNode empty(0);
empty.next = lists[0];
for(int i=1;i<lists.size();i++)
{
ListNode* p = ∅
ListNode* t = lists[i];
while(t && p->next)
{
if(t->val < p->next->val ) //从小到大排序,一个一个插入
{
ListNode* tmp = t->next;
t->next = p->next;
p->next = t;
p =t;
t=tmp;
}
else
p = p->next;
}
if(t) //剩下的接在后面
p->next = t;
}
return empty.next;
}
};