一、题目
二、思路
1、在合并两个有序链表的基础上升级
2、采用优先队列的方法,将vector容器中的每个节点添加到优先队列容器中
3、注意优先队列排序,从小到大升序,应该用>
三、代码
//函数对象自定义排序,注意优先队列从小到大排序,是>
class cmp{
public:
bool operator()(ListNode*a,ListNode *b){
return a->val>b->val;
}
};
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.empty()){
return nullptr;
}
priority_queue<ListNode*,vector<ListNode*>,cmp>Que;
int size=lists.size();
//将vector中的链表添加到优先队列
for(int i=0;i<size;++i){
if(lists[i]!=nullptr){
Que.push(lists[i]);
}
}
ListNode *head=new ListNode(0);
ListNode *node=head;
while(!Que.empty()){
ListNode *temp=Que.top();
node->next=temp;
Que.pop();
if(temp->next){
Que.push(temp->next);
}
node=node->next;
}
return head->next;
}
};