Merge k Sorted Lists
题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
思路:
本题使用优先队列,所有的链表按照第一个数字的大小排进去,
然后进入一个循环,每次出来的都是最小的,再存放进去一个链表。
如此循环反复。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
private:
class Comp{
public:
bool operator()(const ListNode *l1,ListNode *l2){
return l1->val>l2->val;
}
};
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
if(lists.empty()) return NULL;
ListNode *dummy=new ListNode(0),*tail=dummy;
priority_queue<ListNode *,vector<ListNode *>,Comp>pq;
for(int i=0;i<lists.size();i++){
if(lists[i]) pq.push(lists[i]);
}
while(!pq.empty()){
ListNode *tmp=pq.top();pq.pop();
if(tmp->next) pq.push(tmp->next);
tail->next=tmp;
tail=tail->next;
}
//pq优先队列里面已经是最大堆,每一个链表的第一个数都是按照最大的顺序排列。
ListNode *head=dummy->next;
delete dummy;
return head;
}
};

浙公网安备 33010602011771号