// Textbook fragment 06.05 /** Returns the number of elements in this list. */ public int size(); /** Returns whether the list is empty. */ public boolean isEmpty(); /** Returns the first node in the list. */ public Position first(); /** Returns the last node in the list. */ public Position last(); /** Returns the node after a given node in the list. */ public Position next(Position p) throws InvalidPositionException, BoundaryViolationException; /** Returns the node before a given node in the list. */ public Position prev(Position p) throws InvalidPositionException, BoundaryViolationException; /** Inserts an element at the front of the list, returning new position. */ public void addFirst(E e); /** Inserts and element at the back of the list, returning new position. */ public void addLast(E e); /** Inserts an element after the given node in the list. */ public void addAfter(Position p, E e) throws InvalidPositionException; /** Inserts an element before the given node in the list. */ public void addBefore(Position p, E e) throws InvalidPositionException; /** Removes a node from the list, returning the element stored there. */ public E remove(Position p) throws InvalidPositionException; /** Replaces the element stored at the given node, returning old element. */ public E set(Position p, E e) throws InvalidPositionException;