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) { println(" Add: starting length is " + length()); if ( first == null ) { first = new Node(p); last = first; pointer = first; } else { last.next = new Node(p); last.next.previous = last; last = last.next; } println(" Add: new length is " + length()); } void remove(Pulser p) { println(" Remove: enter. starting length is " + length()); if ( isEmpty() ) { println(" Remove: exit. empty list."); return; } pointer = first; println(" Iterate the list."); int i = 0; while ( pointer != null ) { if ( pointer.puls == p ) { println(" Found p: " + i); 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; i++; } if ( pointer == null ) { println(" Remove: exit. p not found."); } println(" Remove: exit. ending length is " + length()); } Pulser next() { if ( iterater == null ) { iterater = first; } else { iterater = iterater.next; } return ( iterater != null ? iterater.puls : null ); } void rewind() { iterater = first; } 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; } }