private static <E> Result<E> isPalindrome_Recurse_Internal(Node<E> head, int length) {
        if (head == null || length == 0) {
            //empty list is considered to be true;
            return new Result<>(true, null);
        } else if (length == 1) {
            return new Result<>(true, head);
        } else if (length == 2) {
            return new Result<>(head.data.equals(head.next.data), head.next);

        }
        Result<E> res = isPalindrome_Recurse_Internal(head.next, length - 2);
        if (!res.isSame || res.node == null) {
            return res;
        } else {
            res.isSame = head.data.equals(res.node.next.data);
            res.node = res.node.next;
            return res;
        }
    }