Итератору не нужен закрытый член следующего узла, поскольку он может получить следующий узел из текущего узла. Вопрос не затрагивает, какие методы вы хотите реализовать с помощью итератора.
выяснить предыдущий узел текущего узла?
С одним связанным списком нет простого способа просмотреть список в обратном направлении. Если методы не предполагают обход списка в обратном направлении, то итератор может быть указателем (ссылкой) на предыдущий узел, что потребует использования фиктивного узла в качестве головного узла списка, чтобы каждый узел данных имел предыдущий узел.
С помощью итератора, который указывает на предыдущий узел, могут быть реализованы методы вставки и удаления (а также получения и установки данных).
С двойным связанным списком может быть реализован метод сращивания (перемещение узла в списке или из одного списка в другой), а также обход списка в обратном направлении.
Обратите внимание, что нативная реализация Java итераторов связанного списка - это то, что я считаю плохой реализацией, поскольку она получена из массива, ориентированного на класс, в отличие от библиотеки шаблонов C ++, которая реализует связанный список как независимый дважды контейнер связанного списка. В C ++ std :: list нет индексации, но вместо этого std :: next можно сканировать список для эмуляции индексации, хотя это медленно. Поскольку Java хранит индекс в своем внутреннем итераторе связанного списка, любая вставка или удаление узла приведет к аннулированию всех других итераторов для этого списка, что является одной из причин, по которой я считаю его плохой реализацией. Другая причина, по которой я считаю плохие итераторы списка Java, заключается в том, что итераторы Java не могут быть скопированы (вместо этого вы просто получаете двойную ссылку на тот же объект итератора).