23 Merge k Sorted Lists
链接:https://leetcode.com/submissions/detail/28706092/
问题描述:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Hide Tags Divide and Conquer Linked List Heap
这道题算是Merge Two Sorted Lists的扩展。归并k个链表。可以每次合并两个链表,把结果放在一个向量中,再每次合并两个链表,这样迭代,指导只剩一个链表。
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *t=new ListNode(0),*p=t;
while(l1&&l2)
{
if(l1->val<l2->val)
{
t->next=l1;
t=l1;
l1=l1->next;
}
else
{
t->next=l2;
t=l2;
l2=l2->next;
}
}
if(l1)
t->next=l1;
if(l2)
t->next=l2;
t=p->next;
delete p;
return t;
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size()==0)return NULL;
while(lists.size()!=1)
{
int i=0;
vector<ListNode*> temp;
for(;i+1<lists.size();i+=2)
temp.push_back(mergeTwoLists(lists[i],lists[i+1]));
if(i==lists.size()-1)
temp.push_back(lists[i]);
lists.clear();
lists=temp;
}
return lists[0];
}
};
题外话:这一题是到现在为止看到的C在速度上被其他语言碾压了,另外其他题目的速度C都是遥遥领先,python大法逆袭啊。