package edu.ucsd.arcum.util; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class ReverseListIterator<T> implements ListIterator<T>, Iterable<T> { private final ListIterator<T> it; public ReverseListIterator(List<T> list) { this.it = list.listIterator(); while (it.hasNext()) { it.next(); } } @Override public void add(T val) { it.add(val); } @Override public boolean hasNext() { return it.hasPrevious(); } @Override public boolean hasPrevious() { return it.hasNext(); } @Override public T next() { return it.previous(); } @Override public int nextIndex() { return it.previousIndex(); } @Override public T previous() { return it.next(); } @Override public int previousIndex() { return it.nextIndex(); } @Override public void remove() { it.remove(); } @Override public void set(T val) { it.set(val); } @Override public Iterator<T> iterator() { return this; } }