Merge k Sorted Lists

来源:互联网 发布:自助建站软件 编辑:程序博客网 时间:2024/06/03 20:40

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

可以用merge sort的思想做。

这里用了priority_queue,相当于heap。

先存下k个链表头,选出最小的t,然后将t->next插入堆。 下一个最小的就是堆的top。


struct compare{    bool operator() (ListNode *a, ListNode *b)    {        return a->val > b->val;    }};ListNode *mergeKLists(vector<ListNode *> &lists){    priority_queue<ListNode *, vector<ListNode *>, compare> priqueue;    for (int i = 0; i < lists.size(); i++)    {        if (lists[i] != NULL)        {            priqueue.push(lists[i]);        }    }    ListNode *cur = new ListNode(0);    ListNode *temp,*head=cur;    while (!priqueue.empty())    {        temp = priqueue.top();        priqueue.pop();        cur ->next = temp;        cur = temp;        if (temp->next != NULL)        {            priqueue.push(temp->next);        }    }    return head->next;}


0 0