import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
         int count = 0;
         ListNode cur = head;
         while (cur != null) {
             count++;
            cur = cur.next;
         }
        
        if (count < k) {
            return head;
        }
        
        int term = count / k;
        
        ListNode preHead = new ListNode(-1);
        preHead.next = head;
        ListNode pre = preHead;
        ListNode tail;
        ListNode next;
        
        for (int i = 0; i < term; i++) {
            tail = pre.next;
            
            for (int j = 0; j < k - 1; j++) {
                next = tail.next;
                tail.next = next.next;
                next.next = pre.next;
                pre.next = next;
            }
            
            pre = tail;
        }
        
        return preHead.next;
    }
}