Привет Я создаю структуру связанных списков и внутри списка я определяю внутренний класс итератора. В настоящее время у меня проблемы с методом remove. Функциональность, которую я хочу, состоит в том, что она не может быть вызвана, если следующий не был вызван или текущий элемент в списке уже удален. Вот что у меня есть.Проблема с внутренними классами итераторов remove method
private class ListItr implements java.util.Iterator<E>{
private Node<E> currentNode;
private Node<E> nextNode;
private Node<E> previousNode;
public ListItr(List<E> theList){
previousNode = new Node<E>(null);
currentNode = new Node<E>(null);
nextNode = theList.head;
currentNode.setSuccessor(nextNode);
}
public boolean hasNext(){
return nextNode != null;
}
public E next(){
if(nextNode == null)
throw new NoSuchElementException();
previousNode = currentNode;
currentNode = nextNode;
nextNode = nextNode.getSuccessor();
return currentNode.getElement();
}
public void remove(){
if(currentNode == null)
throw new IllegalStateException();
nextNode = currentNode.getSuccessor();
previousNode.setSuccessor(nextNode);
currentNode = null;
size--;
}
}
Как вы можете видеть, это будет успешно удалить узел в списке, сращивания вокруг него, установки текущего узла в нуль. Однако, если он вызывается первым без вызова следующего, он все равно будет работать, когда я этого не хочу. Я могу взломать его, добавив флаг nextNotCalled, установив его в true в конструкторе, а затем установив его false при следующем вызове, но я чувствую, что это не так, как это сделать ...
Это домашнее задание? Если да, отметьте его соответствующим образом. Java уже имеет связанный список. – anubhava
Я не понимал, что есть отдельная домашняя бирка, я буду помнить об этом, потому что будущие записи благодарны! – Erik