import java.util.*;

public class Solution {
    
    public ListNode reverseKGroup (ListNode head, int k) {
        
        //采用递归方法先反转一个,
        //反转后的尾部可以指向下一个反转的开始节点
        ListNode tail = head;//第一次反转的尾部

        for(int i=0;i<k;i++){
            if(tail==null){//不足反转
                return head;
            }
            tail = tail.next;
        }

        ListNode pre = null;//作为新的前驱节点,
        //不能直接使用head进行反转,因为head还要用来连接下一k组
      
        //进行反转
        ListNode cur = head;
        ListNode tmp = cur;


        while(cur!=tail){
            tmp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = tmp;
        }
        head.next = reverseKGroup(tail,k);

        return pre;
    }
    
}