leetcode23 合并k个排序链表

 

/**
 * 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;
    }
};

 

 

posted @ 2019-06-13 16:04  Joel_Wang  阅读(105)  评论(0编辑  收藏  举报