3 回答
![?](http://img1.sycdn.imooc.com/545866130001bfcb02200220-100-100.jpg)
TA贡献1847条经验 获得超11个赞
在这种情况下,失效节点表示不存在的节点。
if (node.getNext( ) == null) // convention for defunct node
在这种情况下,该节点p
有一个称为的方法,该方法getNext()
可以返回null,如果返回,则表示它是节点的最后一个。换句话说,没有下一个节点。
顾名思义,这种结构相互链接。getNext()应该在内存中返回下一个节点的位置,如果该位置不存在,则那里不存在任何节点。
通常node
可能会有一个称为setNext(Position<E> next)
this的方法,该方法为该节点保存下一个项目的位置。
![?](http://img1.sycdn.imooc.com/545850c80001ebf202200220-100-100.jpg)
TA贡献1875条经验 获得超3个赞
如果您读过这本书,第7章的“双向链接列表实现”部分将说明由于消除了列表中任何已删除的位置(节点)而导致的无效位置概念。因为该remove()方法实现了将要删除的位置设置为null值。
因此,该validate()方法实际上检查输入位置是否未从列表中删除。再次,通过检查调用getNext()是否会带来null价值。如果是这样,则必须null使用该remove()方法将其设置为已删除位置。因此,由于输入位置p不再在列表中(因为它是已删除的位置),因此将引发错误。
为了更好地理解,只需参考本书中的delete()方法即可。这是书中的内容:
// Removes the element stored at Position p and returns it (invalidating p).
public E remove(Position<E> p) throws IllegalArgumentException {
Node<E> node = validate(p);
Node<E> predecessor = node.getPrev();
Node<E> successor = node.getNext();
predecessor.setNext(successor);
successor.setPrev(predecessor);
size−−;
E answer = node.getElement();
node.setElement(null); // help with garbage collection
node.setNext(null); // and convention for defunct node
node.setPrev(null);
return answer;
}
添加回答
举报