3 回答
TA貢獻1847條經驗 獲得超11個贊
在這種情況下,失效節點表示不存在的節點。
if (node.getNext( ) == null) // convention for defunct node
在這種情況下,該節點p有一個稱為的方法,該方法getNext()可以返回null,如果返回,則表示它是節點的最后一個。換句話說,沒有下一個節點。
顧名思義,這種結構相互鏈接。getNext()應該在內存中返回下一個節點的位置,如果該位置不存在,則那里不存在任何節點。
通常node可能會有一個稱為setNext(Position<E> next)this的方法,該方法為該節點保存下一個項目的位置。
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;
}
添加回答
舉報
