Вот это НЕ проходит: (кажется, по этим 2м пунктам: 1. Круговой итератор должен после последнего элемента переходить на первый и так далее. 2. Метод remove без параметров должен удалять текущий элемент.)
public class RoundIterator implements Iterator<T>{
        ListIterator<T> it = Solution.super.listIterator();
        @Override
        public boolean hasNext() {
            if(!it.hasNext()){
                it.previous();
                it.previous();
                it.previous();
            }
            return it.hasNext();
        }

        @Override
        public T next() {
            return it.next();
        }

        @Override
        public void remove() {
            it.remove();
        }
    }
А это, йбтвмть, ПРОХОДИТ:
public class RoundIterator implements Iterator<T>{
        ListIterator<T> it = Solution.super.listIterator();
        @Override
        public boolean hasNext() {
            if(!it.hasNext()) it = Solution.super.listIterator();
            return it.hasNext();
        }

        @Override
        public T next() {
            return it.next();
        }

        @Override
        public void remove() {
            it.remove();
        }
    }
Вывод и там и там: 1 2 3 1 2 3 1 2 3 1