classSolution{public:intlen;ListNode*reverseKGroup(ListNode*head,intk){len=getLength(head);if(len<k||head==NULL||k<=1){returnhead;}ListNode**tmp=newListNode*[2];tmp=reverseKStep(head,k);len-=k;head=tmp[0];ListNode*beforebackup=tmp[1];while(len>=k){tmp=reverseKStep(beforebackup->next,k);len-=k;beforebackup->next=tmp[0];beforebackup=tmp[1];}returnhead;}private:// Returns two pointers: the first is the head, the second is the last node
ListNode**reverseKStep(ListNode*before,intk){ListNode*beforebackup=before;ListNode*now=before->next;intcount=1;while(now!=NULL&&count<k){count++;ListNode*next=now->next;now->next=before;before=now;now=next;}beforebackup->next=now;ListNode**ans=newListNode*[2];ans[0]=before;ans[1]=beforebackup;returnans;}intgetLength(ListNode*head){intlentmp=0;while(head!=NULL){head=head->next;lentmp++;}returnlentmp;}};