6.合并K个链表

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode* head=new ListNode(0),*minval=NULL,*p=head;
        int n=lists.size(),m=0;
        if(n==0) return minval;
        vector<ListNode*> h(n);
        for(int i=0;i<n;i++){
            h[i]=lists[i];
            if(!h[i])m++;//空链个数
        }
        int count=0;
        while(1){
            int j=0;int mi=INT_MAX;
            for(int i=0;i<n;i++)if(h[i]&&h[i]->val<mi){minval=h[i];mi=minval->val;j=i;}
            if(minval){p->next=minval;p=p->next;}
            if(!h[j])break;
            if(h[j])h[j]=h[j]->next;
            if(!h[j])count++;
            if(count+m==n)break;
            
        }
        return head->next;
        
    }
};

用一个结点容器记录当前需要比较的n个结点

最坑爹的是判空:先记录一下开始的空链个数,最后每到头一个空链数+1,与n相等时即结束

posted @ 2020-07-07 10:13  阿破  阅读(109)  评论(0编辑  收藏  举报