首页 > 其他 > 详细

23. Merge k Sorted Lists

时间:2016-03-18 21:44:41      阅读:241      评论:0      收藏:0      [点我收藏+]

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

Subscribe to see which companies asked this question

 思路:类似归并排序,每个链表已经排好序了,现在只需要将各个链表合并成一个链表。要点:分而治之,最后合并。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
private:
    ListNode * merge_help(vector<ListNode*>&lists,int l,int r){
        if(l>=r)
            return lists[l];
        int mid=(l+r)/2;
        ListNode * left =merge_help(lists,l,mid);
        ListNode * right=merge_help(lists,mid+1,r);
        ListNode * temp =new ListNode (-1);
        ListNode *cur =temp;
        while(left&&right){
            if(left->val<=right->val){
                cur->next =left;
                left=left->next;
            }
            else{
                cur->next=right;
                right=right->next;
            }
            cur=cur->next;
        }
        if(left)
            cur->next=left;
        if(right)
            cur->next=right;
        return temp->next;
        
    }
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if(lists.size()==0)
            return NULL;
        return merge_help(lists,0,lists.size()-1);
            
    }
    
    
};

 

23. Merge k Sorted Lists

原文:http://www.cnblogs.com/zhoudayang/p/5293434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!