class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(!head || k <= 1) return head; //空指针及不需要翻转的情况直接返回head
ListNode* pre = nullptr; //记录前一个ListNode
ListNode* cur = head; //记录当前ListNode
ListNode* next = nullptr; //记录后一个ListNode
for(int i = 0; i < k; i++) { //检测ListNode数量是否大于k
if(!cur) return head; //若不大于直接返回头
cur = cur->next; //指向下一个ListNode
}
cur = head; //检测完毕后cur复原成头
for(int i = 0; i < k; i++) {
next = cur->next; //记录后一个ListNode
cur->next = pre; //cur指向前一个ListNode
pre = cur; //pre右移
cur = next; //cur右移
}
head->next = reverseKGroup(next, k); //此时k个ListNode翻转完毕,尾(原来的头)指向递归后返回的头
return pre; //返回新的头
}
};