题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
思路:
两两个的合并,得到最后的结果。这里采用的是将1,2合并,3,4合并,然后再不断合并,直到满足条件。如果先将1,2合并,再将其结果与3合并,依次类推则会出现超时现象。
代码:
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;
while(lists.size()>1)
{
lists.push_back(mergeTowList(lists[0],lists[1]));
lists.erase(lists.begin());
lists.erase(lists.begin());
}
return lists.front();
}
ListNode* mergeTowList(ListNode *head,ListNode* list)
{
if(head==NULL) return list;
else if(list==NULL) return head;
ListNode *pmergeHead=Null;
if(head->val<list->val)
{
pmergeHead=head;
pmergeHead->next=mergeTowList(head->next,list);
}
else
{
pmergeHead=list;
pmergeHead->next=mergeTowList(head,list->next);
}
return pmergeHead;
}
};