public ListNode reverseGroup(ListNode preNode, int k, boolean force) {
        ListNode tail = preNode.next;

        ListNode current = preNode.next;
        ListNode previous = preNode;
        ListNode next = current.next;
        int i = 0;
        for (i = 0; i < k && current != null; i++) {
            current.next = previous;
            previous = current;
            current = next;
            next = current == null ? null : current.next;
        }

        preNode.next = previous;
        tail.next = current;
        
        if(i<k && !force)
            return reverseGroup(preNode, k,true);
        
        return tail;
    }