题解 | #合并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
全部评论

相关推荐

点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务