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相等时即结束