Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
如果有k条链表,每条n个节点,2n * k/2 + 4n
* k/4 +……= O( nk log k )
思路:第一次 :最后一个融合到第一个,删除最后一个链表;倒数第二个融合到第二个,删除最后一个(原先的倒数第二个),……
第二次 : 重复第一次
……
直到 只有一个链表
#include
#include
#include
using namespace std;
// Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* mergeKLists(vector& lists) {
int len;
if(lists.size()==0)
return NULL;
while( (len=lists.size()) > 1 )
{
int index=len/2;
for(int i=0;ival>second->val)
{
lists[i]=second;
second=second->next;
}
else
{
first=first->next;
}
currNode=lists[i];
while(second!=NULL && first!=NULL)
{
if(first->valval)
{
currNode->next=first;
currNode=currNode->next;
first=first->next;
}
else
{
currNode->next=second;
currNode=currNode->next;
second=second->next;
}
}
ListNode* tmp=first==NULL?second:first;
while(tmp!=NULL)
{
currNode->next=tmp;
currNode=currNode->next;
tmp=tmp->next;
}
currNode->next=NULL;
lists.pop_back();
}
}
return lists[0];
}
};
int main()
{
Solution s;
ListNode* node=NULL;
vector vc;
vc.push_back(node);
vc.push_back(node);
cout<