class Solution {
public:
struct cmp{
bool operator()(ListNode *A,ListNode *B){
return A->val > B->val; // 小跟堆
}
};
ListNode *mergeKLists(vector<ListNode *> &lists) {
if(!lists.size()) return nullptr;
priority_queue<ListNode*, vector<ListNode*>, cmp> pq; // 重写仿函数
//priority_queue<Type, Container, Functional>Type 就是数据类型,Functional 就是比较的方式。
//Container 就是容器类型(Container必须是用数组实现的容器比如vector,deque等等,但不能用 list。STL里面默认用的是vector)
for(auto it : lists){
if(it)pq.push(it); // 链表不能为空
}
ListNode *ans = new ListNode(0);
ListNode *p = ans;
p->next = NULL;
while(!pq.empty()){
ListNode *tmp = pq.top(); // 优先队列第一个链表
pq.pop(); // 出队
if(tmp->next)pq.push(tmp->next);
p->next = tmp;
p = p->next;
}
p->next = NULL;
return ans->next;
}
};