题解 | #合并k个已排序的链表#(优先队列重写仿函数)
合并k个已排序的链表
http://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
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; } };