合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
解法:
class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {auto cmp = [](ListNode*& a, ListNode*& b) {return a->val > b->val;};priority_queue<ListNode*, vector<ListNode*>, decltype(cmp) > q(cmp);for (auto node : lists) {if (node) q.push(node);}ListNode *dummy = new ListNode(-1), *cur = dummy;while (!q.empty()) {auto t = q.top(); q.pop();cur->next = t;cur = cur->next;if (cur->next) q.push(cur->next);}return dummy->next;}
};