题目描述
合并k 个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。
示例1
输入
[{1,2,3},{4,5,6,7}]
返回值
{1,2,3,4,5,6,7}
/**
* 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;
return merge(lists, 0, lists.size()-1);
}
ListNode* merge(vector<ListNode*> &lists, const int begin, const int end){
if(begin==end) return lists[begin];
int mid = (begin+end)/2;
ListNode* left = merge(lists, begin, mid);
ListNode* right = merge(lists, mid+1, end);
ListNode* head = NULL;
ListNode* tmp=head;
while(right || left){
ListNode* p=NULL;
if(!right || (right && left && left->val<right->val)){
p=left;
left = left->next;
}else if(!left || (right && left && left->val>=right->val)){
p=right;
right=right->next;
}
if(!head){
head=p;
tmp=head;
}else{
tmp->next=p;
tmp=p;
}
tmp->next=NULL;
}
return head;
}
};