首页 > 编程语言 > 详细

leetcode23 合并k个排序链表

时间:2019-06-13 16:45:40      阅读:127      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

/**
 * 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) {
        // time O(nk) space O(1) k为lists宽度
        int len=lists.size();
        int flag=len;
        ListNode *ahead,*pre,*cur;
        pre=new ListNode(-1);ahead=pre;
        while(flag){
            cur=NULL;
            int k;//记录最小值的下标
            //循环取每个当前值的最小值,当前值的序列如果由lists[i]变成最小堆,那么可以优化time
            for(int i=0;i<len;i++){
                if(cur==NULL){
                    cur=lists[i];k=i;
                }else if(lists[i]!=NULL && cur->val>lists[i]->val){
                    cur=lists[i];k=i;
                }
            }
            if(cur==NULL) break;//处理异常情况:当所有为空的时候
            pre->next=cur;
            pre=cur;
            if(lists[k]!=NULL) lists[k]=lists[k]->next;
            if(lists[k]==NULL) flag--;
        }
        return ahead->next;
    }
};

 

 

leetcode23 合并k个排序链表

原文:https://www.cnblogs.com/joelwang/p/11017091.html

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