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