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

合并k个已排序的链表

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

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        if(lists.empty())
            return nullptr;
        int n = lists.size();
        while(n>1){
            int k = (n+1) / 2;
            for(int i=0; i<n/2; i++){
                lists[i] = merge(lists[i], lists[i+k]);
            }
            n = k;
        }
        return lists[0];
        
    }
    ListNode* merge(ListNode* p1, ListNode* p2){
        ListNode* dummy = new ListNode(0);
        ListNode* cur = dummy;
        while(p1 && p2){
            if(p1->val > p2->val){
                cur->next = p2;
                p2 = p2->next;
            } else{
                cur->next = p1;
                p1 = p1->next;
            }
            cur = cur->next;
        }
        if(p1) cur->next = p1;
        if(p2) cur->next = p2;
        return dummy->next;
    }
};
https://www.cnblogs.com/grandyang/p/4606710.html
https://www.cnblogs.com/grandyang/p/4606710.html
全部评论

相关推荐

07-20 21:57
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
06-25 16:25
梧州学院 Java
愿汐_:项目介绍那么长,然而你做了啥就一句话?
点赞 评论 收藏
分享
07-23 14:04
东北大学 C++
既然这样,为什么不点击就送呢
牛马88号:因为你合适。但有很多笔试就挂了、通过了再排序的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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