public CycList<E> reverse() {
    if (!isProperList) {
      throw new RuntimeException(this + " is not a proper list and cannot be reversed");
    }
    final CycList<E> result = new CycList<E>();
    for (int i = (this.size() - 1); i >= 0; i--) {
      result.add(this.get(i));
    }
    return result;
  }