interface Collection { public void add(A x); public Iterator iterator(); } interface Iterator { public A next(); public boolean hasNext(); } class NoSuchElementException extends RuntimeException {} class LinkedList implements Collection { protected class Node { A elt; Node next = null; Node(A elt){ this.elt = elt; } } protected Node head = null, tail = null; public LinkedList(){} public void add(A elt){ if(head==null){ head = new Node(elt); tail = head; } else { tail.next = new Node(elt); tail = tail.next; } } public Iterator iterator(){ return new Iterator(){ protected Node prt = head; public boolean hasNext(){ return ptr!=null; } public A next(){ if(ptr!=null){ A elt=ptr.elt; ptr=ptr.next; return elt; } else throw new NoSuchElementException(); } }; } }