LeetCode 23. Merge k Sorted Lists

将所有起始不为空的链表的 头部存入优先队列,然后每次从优先队列里面取出值最小的, 并判断它的下一个节点是否为空,如果不为空,将下一个节点也存入优先队列。

class Solution
{
    struct cmp
    {
        bool operator ()(ListNode* &a, ListNode* &b)
        {
            return a->val > b->val;
        }
    };

public:
    ListNode* mergeKLists(vector<ListNode*>& lists)
    {
        priority_queue<ListNode*, vector<ListNode*>, cmp> que;

        for(int i=0; i<lists.size(); ++ i)
        {
            if(lists[i] != nullptr)
            {
                ListNode* f=lists[i];
                que.push(f);
                lists[i] = lists[i]->next;
            }
        }
        if(que.size() == 0)
            return nullptr;

        ListNode *arr = new ListNode(0);
        ListNode *bg = arr;

        while(!que.empty())
        {
            ListNode *f = que.top();
            que.pop();

            arr->val = f->val;
            if(f->next != nullptr)
                que.push(f->next);
            
            if(que.empty() == false)
            {
                arr->next = new ListNode(0);
                arr = arr->next;
            }
        }
        return bg;
    }
};
posted @ 2017-03-09 15:28  aiterator  阅读(63)  评论(0编辑  收藏  举报