Linked List Iteration
- Implement an iterator for a (singly) linked list.
Assume we pass the head
reference variable, which points to the front of a linked list to the following Iterator class.
Exercise Complete the implementation of hasNext
and next
methods.
public class LinkedList<T> implements Iterable<T> {
private Node<T> head;
// other fields/methods are not shown here!
@Override
public Iterator<T> iterator() {
return new LinkedListIterator();
}
private class LinkedListIterator implements Iterator<T> {
@Override
public T next() {
return null; // TODO Implement me!
}
@Override
public boolean hasNext() {
return false; // TODO Implement me!
}
}
}
Hint: describe the responsibilities of hasNext
and next
before implementing them.
Solution
private class LinkedListIterator implements Iterator<T> {
private Node<T> current;
public LinkedListIterator() {
current = head;
}
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
T t = current.data;
current = current.next;
return t;
}
@Override
public boolean hasNext() {
return current != null;
}
}