链表:
题目:
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表.
解题:
利用优先级队列比较每个链表的头元素。然后再将最小的值加入一个新的链表中。
空间复杂度 O(nlogk),时间复杂度O(k)
class Solution {
public:
struct comp {
bool operator()(ListNode* a, ListNode* b) {
return a->val > b->val;
}
};
priority_queue<ListNode*, vector<ListNode*>, comp> q;
ListNode* mergeKLists(vector<ListNode*>& lists) {
for (auto node: lists) {
if (node) q.push(node);
}
ListNode* head = new ListNode();
ListNode* tail = head;
while (!q.empty()) {
ListNode* node = q.top();
q.pop();
tail->next = node;
tail = tail->next;
if (node->next) q.push(node->next);
}
return head->next;
}
};