class Solution {
public:
ListNode* move(ListNode *p,int k){//移动函数
while(p!=nullptr&&k!=0){
p=p->next;
k--;
}
return p;
}
void reverse(ListNode *&node1,ListNode *&node2,ListNode *&yum){//反转函数
while(node1!=node2){
ListNode *temp=new ListNode(node1->val);
temp->next=node2->next;
node2->next=temp;
node1=node1->next;
yum->next=node1;
}
}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode *yum=new ListNode(0);//设置虚拟节点
yum->next=head;
ListNode *node1=head;
ListNode *node2=move(head,k-1);
ListNode *temp=yum;
reverse(node1,node2,temp);
while(node2!=nullptr){
reverse(node1,node2,temp);//反转函数
temp=move(node1,k-1);
node1=temp->next;//下一轮反转的起点
node2=move(node1,k-1);//下一轮反转的终点
}
return yum->next;
}
};