题意
传送门 LeeCode 23
题解
遍历链表中 n × k n\times k n×k 个元素,每次只考虑 k k k 个已排序链表中第一个未合并的元素,用优先队列维护最小值。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
struct cmp{
bool operator() (ListNode *a, ListNode* b) {
return a->val > b->val;
}
};
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode head, *tail = &head;
priority_queue<ListNode*, vector<ListNode*>, cmp> que;
for(int i = 0; i < lists.size(); i++){
if(lists[i]) que.push(lists[i]);
}
while(!que.empty()){
ListNode *p = que.top(); que.pop();
tail->next = p;
tail = tail->next;
if(p->next) que.push(p->next);
}
return head.next;
}
};