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 size = 0;
        ListNode temp = head;
        while (temp != null) {
            size++;
            temp = temp.next;
        }
        ListNode res = new ListNode(-1);
        res.next = head;
        ListNode fre = res; //前驱结点
        ListNode cur = fre.next; //当前结点
        int overturn_cnt = size / k; //翻转次数
        for (int i = 0; i < overturn_cnt; i++) {
            for (int j = 0; j < k - 1; j++) {
                temp = cur.next;
                cur.next = temp.next;
                temp.next = fre.next;
                fre.next = temp;
            }
            fre = cur;
            cur = fre.next;
        }
       return res.next;
    }
}