3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
在這種情況下,失效節(jié)點(diǎn)表示不存在的節(jié)點(diǎn)。
if (node.getNext( ) == null) // convention for defunct node
在這種情況下,該節(jié)點(diǎn)p
有一個(gè)稱(chēng)為的方法,該方法getNext()
可以返回null,如果返回,則表示它是節(jié)點(diǎn)的最后一個(gè)。換句話(huà)說(shuō),沒(méi)有下一個(gè)節(jié)點(diǎn)。
顧名思義,這種結(jié)構(gòu)相互鏈接。getNext()應(yīng)該在內(nèi)存中返回下一個(gè)節(jié)點(diǎn)的位置,如果該位置不存在,則那里不存在任何節(jié)點(diǎn)。
通常node
可能會(huì)有一個(gè)稱(chēng)為setNext(Position<E> next)
this的方法,該方法為該節(jié)點(diǎn)保存下一個(gè)項(xiàng)目的位置。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您讀過(guò)這本書(shū),第7章的“雙向鏈接列表實(shí)現(xiàn)”部分將說(shuō)明由于消除了列表中任何已刪除的位置(節(jié)點(diǎn))而導(dǎo)致的無(wú)效位置概念。因?yàn)樵搑emove()方法實(shí)現(xiàn)了將要?jiǎng)h除的位置設(shè)置為null值。
因此,該validate()方法實(shí)際上檢查輸入位置是否未從列表中刪除。再次,通過(guò)檢查調(diào)用getNext()是否會(huì)帶來(lái)null價(jià)值。如果是這樣,則必須null使用該remove()方法將其設(shè)置為已刪除位置。因此,由于輸入位置p不再在列表中(因?yàn)樗且褎h除的位置),因此將引發(fā)錯(cuò)誤。
為了更好地理解,只需參考本書(shū)中的delete()方法即可。這是書(shū)中的內(nèi)容:
// 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;
}
添加回答
舉報(bào)