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:
struct myCmp{
bool operator()(const ListNode * a, const ListNode * b){
return a->val<=b->val;
}
};
ListNode *mergeKLists(vector<ListNode *> & lists){
ListNode *head=new ListNode(0),*curr=head;
set<ListNode *,myCmp> mergeSet;
set<ListNode *,myCmp>::iterator iter;
for(int i=0;i<lists.size();i++){
if(lists[i]!=NULL){
mergeSet.insert(lists[i]);
}
}
while(!mergeSet.empty()){
iter=mergeSet.begin();
mergeSet.erase(iter);
curr->next=*iter;
curr=curr->next;
if(curr->next){
mergeSet.insert(curr->next);
}
}
curr=head;
head=head->next;
delete curr;
curr=NULL;
return head;
}
};