nextCalled = true; return curr.next() != null;
nextCalled = true; return curr != null;
  public Iterator iterator() {    return new Iterator() {      private SLNode curr = SLNode.this;      private boolean nextCalled = false;      public boolean hasNext() {        nextCalled = true;        return curr.next() != null;      }      public Object next() {        Object currData = curr.data();        curr = curr.next();        return currData;      }      public void remove() {        if (!nextCalled || !hasNext())          throw new IllegalStateException();        curr.setNext(curr.next().next());        curr = curr.next();      }    };  }