Merge k Sorted Lists
说明:
将多个已经排序好的链表合并成一个有序的链表。
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input:
[
1->4->5,
1->3->4,
2->6
]
Output: 1->1->2->3->4->4->5->6
Answer:
//使用优先队列(priority_queue)实现堆,初始时将每个链表的第一个结点加入堆中,之后每次弹出堆顶元素,将这个结点指向的下一结点加入到堆中,直到所有结点添加完毕。
struct cmp {
bool operator()(ListNode * x, ListNode * y) {
return x->val > y->val;
}
};
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
priority_queue<ListNode*, vector<ListNode*>, cmp> q;
for(int i = 0; i < lists.size(); i++)
if(lists[i] != NULL)
q.push(lists[i]);
ListNode *dummy = new ListNode(0);
ListNode *cur = dummy, *tmp = NULL;
while(!q.empty()) {
tmp = q.top();
q.pop();
cur->next = tmp;
cur = cur->next;
if(tmp->next != NULL)
q.push(tmp->next);
}
cur = dummy->next;
delete dummy;
return cur;
}
};