题解 | #合并k个已排序的链表#

合并k个已排序的链表

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

1.用最小堆解决这个问题会更好。
2.注意从小到大用大于号。
3.最后只需要循环的放入后续元素即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {


public:

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

    ListNode *mergeKLists(vector<ListNode *> &lists) {
       //最小堆
       if(!lists.size()) return NULL;

        ListNode* dummy = new ListNode(-1);
        ListNode* p = dummy;


        //最小堆
        priority_queue<ListNode*, vector<ListNode*>,cmp> pq;

        for(ListNode* head:lists){
            if(head){
                pq.push(head);
            }
        }

        while(!pq.empty()){
            ListNode* node = pq.top();
            pq.pop();

            if(node->next){
                pq.push(node->next);
            }

            p->next = node;
            p = p->next;

        }

        return dummy->next;

    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务