您的位置:首页 > 其它

leetcode.23. Merge k Sorted Lists

2016-05-20 18:01 225 查看
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) {}
* };
*/
struct CompareListNode{
bool operator()(const ListNode*p, const ListNode* q)const{
return p->val > q->val;
}
};

class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode head(-1);
vector<ListNode*> vec_helper;
//除去空链表
for (int i=0; i<lists.size(); i++)
{
if (lists[i]!=NULL)
vec_helper.push_back(lists[i]);
}
//建小堆
std::make_heap(vec_helper.begin(), vec_helper.end(), CompareListNode());
ListNode* pTail = &head;
while (vec_helper.size() > 0)
{
//取最小的元素对应的节点
ListNode *pNode = vec_helper.front();
pTail->next= pNode;
pTail = pTail->next;
std::pop_heap(vec_helper.begin(), vec_helper.end(),  CompareListNode());
vec_helper.pop_back();
//将该节点之后一个节点加堆中
if (pNode->next)
{
vec_helper.push_back(pNode->next);
std::push_heap(vec_helper.begin(), vec_helper.end(),  CompareListNode());
}
}

pTail->next = NULL;
return head.next;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: