/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
struct Greater {
bool operator() (ListNode const * const x, ListNode const * const y) const {return x && (!y || x->val > y->val);}
//只要记住const只对其左边的操作符施加作用,因此上述表达式翻译为
//ListNode const * x 代表x指针指向可以改,但是指向的数值不能改
//ListNode* const x 代表x指针指向不能改,但是指向的数值可以改
//ListNode const * const x 代表x指针以及所指向的数值都不能改
//任何不会修改数据成员的函数都因该声明为const类型。在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将报错
};
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
if(lists.size()<=0){
return NULL;
}
make_heap(lists.begin(), lists.end(), Greater());
ListNode *head = NULL, *curr = head;
while(!lists.empty()){
if(head == NULL){
head = curr = lists.front();
}else{
curr->next = lists.front();
curr = curr -> next;
}
pop_heap(lists.begin(), lists.end(), Greater());
if(lists.back()){
ListNode *tmp = lists.back()->next;
if(tmp){
lists.back() = tmp;
push_heap(lists.begin(),lists.end(),Greater());
}else{
lists.pop_back();
}
}else{
lists.pop_back();
}
}
return head;
}
};
Leetcode Merge k Sorted Lists 利用stl heap来实现
最新推荐文章于 2017-07-04 01:01:01 发布