public ListNode reverseKGroup(ListNode head, int k) {
        if (head == null)
            return null;

        if (k <= 1)
            return head;

        ListNode preHead = new ListNode(0);
        preHead.next = head;

        ListNode preNode = preHead;
        while(preNode.next != null){
            preNode = reverseGroup(preNode,k,false);
        }

        return preHead.next;
    }