地址:https://leetcode.com/problems/merge-k-sorted-lists/
题目:
Merge sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
理解:
合并k个有序链表。想到了外部排序里面的败者数,其本质也是一个堆。因此,把k个链表的头结点加到一个小根堆里,然后把堆顶弹出,并把堆顶的下一个结点加入。
实现:
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
auto comp = [](const ListNode* lhs, const ListNode* rhs) {return lhs->val > rhs->val; };
priority_queue<ListNode*, vector<ListNode*>, decltype(comp)> q(comp);
for (auto p : lists)
if (p)
q.push(p);
if (q.empty()) return nullptr;
ListNode* head = q.top();
q.pop();
if (head->next)
q.push(head->next);
ListNode* p = head;
while (!q.empty()) {
p->next = q.top();
q.pop();
p = p->next;
if (p->next) q.push(p->next);
}
return head;
}
};