Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/*归并两子链表*/
ListNode* mergeTwoLists(ListNode* L1, ListNode* L2){
if(L1 == NULL)
return L2;
if(L2 == NULL)
return L1;
if(L1->val <= L2->val){
L1->next = mergeTwoLists(L1->next, L2);
return L1;
}
else{
L2->next = mergeTwoLists(L1, L2->next);
return L2;
}
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.empty())
return NULL;
ListNode* subList;
while(lists.size()>1){
subList = mergeTwoLists(lists[0], lists[1]);//每次将lists的前两个子链表归并
lists.push_back(subList);//归并后的链表插到lists末尾
/*删除lists中前两个子链表,直到lists最后只剩一个链表*/
lists.erase(lists.begin());
lists.erase(lists.begin());
}//while
return lists.front();//返回最后的链表
}
};