Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
这里用到了优先队列,每次让权值最小的节点出队并让它的后一个节点(不为NULL)入队,直到队列为空。而如果当前只剩一条链不为空时,直接把这条链链接到最后。
struct cmp{
bool operator()(ListNode* a,ListNode* b){
return a->val > b->val;
}
};
ListNode* mergeKLists(vector<ListNode*>& lists) {
priority_queue<ListNode*,vector<ListNode*>,cmp> p_queue;
ListNode* head=new ListNode(0);
ListNode* p=head;
int n=lists.size();
int rem=n;
for(int i=0;i<n;i++){
if(lists[i])p_queue.push(lists[i]);
else rem--;
}
while(!p_queue.empty()){
ListNode* temp=p_queue.top();
p_queue.pop();
p->next=temp;
p=p->next;
if(rem==1)break;
if(temp->next)p_queue.push(temp->next);
else rem--;
}
return head->next;
}