import java.util.Iterator; public class Stack implements Iterable { private Node first; private int N; private class Node { Item item; Node next; } public void push(Item item) { Node oldfirst = first; first = new Node(); first.item = item; first.next = oldfirst; N++; } public Item pop() { Item item = first.item; first = first.next; N--; return item; } public Iterator iterator() { return new ReverseArrayIterator(); } private class ReverseArrayIterator implements Iterator { private int i = N; @Override public boolean hasNext() { return i > 0; } @Override public Item next() { Node nextnode = first; for (int j = 0; j < N - i; j++) nextnode = nextnode.next; i--; return nextnode.item; } public void remove() { } } public static void main(String[] args) { Stack s = new Stack(); s.push(1); s.push(2); s.push(3); for (int i : s) System.out.println(i); } }