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; //返回新的头 } };