public Object remove(Position p) // O(1) time
throws InvalidPositionException {
DNode v = checkPosition(p);
numElts--;
DNode vPrev = v.getPrev();
DNode vNext = v.getNext();
vPrev.setNext(vNext);
vNext.setPrev(vPrev);
Object vElem = v.element();
// unlink the position from the list and make it invalid
v.setNext(null);
v.setPrev(null);
return vElem;
}
public Object replaceElement(Position p, Object element)
throws InvalidPositionException { // O(1) time
DNode v = checkPosition(p);
Object oldElt = v.element();
v.setElement(element);
return oldElt;
}
public void swapElements(Position a, Position b)
throws InvalidPositionException { // O(1) time
DNode pA = checkPosition(a);
DNode pB = checkPosition(b);
Object temp = pA.element();
pA.setElement(pB.element());
pB.setElement(temp);
}