注意递归调用,以及中途计算node的个数是否满足k,如果不满足,返回head即可,还有注意head->next其实已经是反转后的最后一个节点了,所以head->next 就直接接受上一个迭代返回的前驱节点即可。

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here

        if(!head || k<=1){
            return head;
        }


        ListNode* pre_node = NULL;
        ListNode* cur_node = head;
        ListNode* next_node = NULL;

        for(int i = 0;i<k;i++){
            if(!cur_node) return head;
            cur_node = cur_node->next;
        }

        cur_node = head;

        for(int i = 0; i< k; i++){
            next_node = cur_node->next;
            cur_node->next = pre_node;
            pre_node = cur_node;
            cur_node = next_node;
        }

        head->next = reverseKGroup(next_node,k);

        return pre_node;




    }
};