链表的节点为:
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
首先对链表节点建立一个结构体,结构体包含节点和节点的val值,val值用于优先队列的比较
struct qnode{
int val;
ListNode* node;
qnode(ListNode* n):val(n->val),node(n){};
qnode():val(0),node(nullptr){};
bool operator < (const qnode& n) const{
return val>(n.val); //因为是小根堆,所以用大于号
}
};
定义关于qnode结构体优先队列:
priority_queue<qnode> q;
例如有一个链表节点ListNode* node,将其push进优先队列q的方法为:
q.push(node);
此时会调用qnode的第一个构造函数,用node构造一个qnode结构体push进队列里
优先队列里的每个元素(即qnode结构体)通过每个链表节点的val进行排序。
|