合并k个有序链表

合并k个已排序的链表

http://www.nowcoder.com/questionTerminal/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

简简单单优先队列

class Solution {
public:
    struct Node
    {
        int id,val;
        ListNode * p;
        bool operator < (const Node & a) const{
            return val > a.val;
        }
    };

    ListNode * append(int x,ListNode *tail)
    {
        ListNode *tmp = new ListNode(x);
        tail -> next = tmp;
        return tmp;
    }

    ListNode *mergeKLists(vector<ListNode *> &lists) {
        ListNode *head = new ListNode(0),*tail = head;
        priority_queue<Node> pq;
        for(int i=0;i<lists.size();i++) if(lists[i])
            pq.push(Node{i,lists[i] -> val,lists[i]});
        while(!pq.empty())
        {
            Node tmp = pq.top();pq.pop();
            tail = append(tmp.val,tail);
            if(tmp.p -> next)    pq.push(Node{tmp.id,tmp.p->next->val,tmp.p->next});
        }
        return head -> next;
    }
};
全部评论

相关推荐

fRank1e:吓得我不敢去外包了,但是目前也只有外包这一个实习,我还要继续去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务