public class DynamicList { private class ListElement { E content; ListElement pred; ListElement succ; } private ListElement head; private ListElement tail; private ListElement iterator; public DynamicList() { head = null; tail = null; } public void iteratorInit() { iterator = head; } public boolean hasNext() { return iterator != null; } public E next() { E e = iterator.content; iterator = iterator.succ; return e; } public void add(E element) { ListElement le = new ListElement<>(); le.content = element; le.pred = null; le.succ = null; if(head == null) { head = le; tail = le; } else { le.pred = tail; tail.succ = le; tail = le; } } public E remove(E element) { ListElement i = head; do { if(i.content == element) { i.pred.succ = i.succ; i.succ.pred = i.pred; break; } i = i.succ; } while(i != tail); return element; } }