/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ ListNode* reverseKGroup(ListNode* head, int k) { // write code here ListNode *p=head;int length=0; while(p!=nullptr){ p=p->next;length++; } if(k>length)return head; int t=length/k;ListNode *head1=head;bool tt=false; p=head;//p始终指向这组头节点 ListNode *head_temp=head,*temp=head,*head2=head,*q=head,*q2=head; ListNode *last=head; //temp for(int i=0;i<t;i++){ p=q;temp=q; for(int j=0;j<k;j++){ q=q->next; }//q始终指向下一组第一个结点 for(int j=0;j<k-1;j++){ head2=temp; temp=p->next;p->next=p->next->next;temp->next=head2; head2=temp; } p->next=q; if(tt==false){tt=true;head1=head2;last=p;} else{ last->next=temp;last=p; } } return head1; } };