Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
O(n*logk),n is the length of each list,k is the number of list.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
class Comp{
public:
bool operator()(ListNode* a,ListNode* b){
if(!a)
return true;
if(!b)
return false;
return a->val>b->val;
}
};
ListNode *mergeKLists(vector<ListNode *> &lists) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ListNode*head=NULL,*curr=NULL;
if(lists.empty())
return NULL;
make_heap(lists.begin(),lists.end(),Comp());
while(lists.front()){
if(!head){
head=lists.front();
curr=head;
}else{
curr->next=lists.front();
curr=curr->next;
}
pop_heap(lists.begin(),lists.end(),Comp());
lists.back()=curr->next;
curr->next=NULL;
push_heap(lists.begin(),lists.end(),Comp());
}
return head;
}
};