Чтобы реализовать итератор для связанного списка в Java, вы можете выполнить следующие действия:
- Определите класс для узла связанного списка, назовем его
Node. Он должен иметь поле данных и ссылку на следующий узел.
class Node<T> {
T data;
Node<T> next;
public Node(T data) {
this.data = data;
this.next = null;
}
}
- Создайте отдельный класс для вашего связанного списка, назовем его
LinkedList. У него должны быть методы для добавления элементов в список и получения итератора.
import java.util.Iterator;
class LinkedList<T> implements Iterable<T> {
private Node<T> head;
private Node<T> tail;
public LinkedList() {
head = null;
tail = null;
}
public void add(T data) {
Node<T> newNode = new Node<>(data);
if (head == null) {
head = newNode;
tail = newNode;
} else {
tail.next = newNode;
tail = newNode;
}
}
@Override
public Iterator<T> iterator() {
return new LinkedListIterator();
}
private class LinkedListIterator implements Iterator<T> {
private Node<T> current;
public LinkedListIterator() {
current = head;
}
@Override
public boolean hasNext() {
return current != null;
}
@Override
public T next() {
T data = current.data;
current = current.next;
return data;
}
}
}
- Теперь вы можете использовать итератор для перемещения по связанному списку и доступа к его элементам:
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
for (Integer num : list) {
System.out.println(num);
}
Это выведет:
1
2
3