【LeetCode】23. Merge k Sorted Lists(C++)
阿新 • • 發佈:2018-12-26
地址: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;
}
};