class PulserList { Node first; Node last; private Node pointer; private Node iterater; PulserList() { first = null; last = null; pointer = null; iterater = null; } boolean isEmpty() { return first == null; } void add(Pulser p) { if ( first == null ) { first = new Node(p); last = first; pointer = first; } else { last.next = new Node(p); last.next.previous = last; last = last.next; } } void remove(Pulser p) { if ( isEmpty() ) { return; } pointer = first; while ( pointer != null ) { if ( pointer.puls == p ) { if ( pointer.previous == null ) { // p is the first element. first = pointer.next; if ( first != null ) first.previous = null; } else if ( pointer.next == null ) { // p is the last element last = pointer.previous; last.next = null; } else { // p is in the middle somwhere pointer.previous.next = pointer.next; pointer.next.previous = pointer.previous; } break; } pointer = pointer.next; } } Pulser next() { if ( iterater == null ) { iterater = first; } else { iterater = iterater.next; } return ( iterater != null ? iterater.puls : null ); } void rewind() { iterater = null; } int length() { int i = 0; pointer = first; while ( pointer != null ) { i++; pointer = pointer.next; } return i; } } class Node { Pulser puls; Node next; Node previous; Node(Pulser p) { puls = p; next = null; previous = null; } }