1 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個贊
的實(shí)現(xiàn)removeFirstNode()不會取消節(jié)點(diǎn)的下一個指針的鏈接。
原始鏈表中,第一個節(jié)點(diǎn)的next指針指向第二個節(jié)點(diǎn),第二個節(jié)點(diǎn)的next指針為空。
在新鏈表中,第一個節(jié)點(diǎn)的 next 指針將指向第二個節(jié)點(diǎn),但第二個節(jié)點(diǎn)的 next 指針將指向第一個節(jié)點(diǎn)(以前是第二個節(jié)點(diǎn))。
像這樣的東西(原始列表):
+---+ +---+
| A |--->| B |--->null
+---+ +---+
當(dāng)重新排序時變成這樣,因?yàn)?A 的下一個指針仍然指向 B:
+---+ +---+
| B |--->| A |---+
+---+ +---+ |
^ |
| |
+--------------+
您可以將您的removeFirstNode()實(shí)現(xiàn)更改為如下所示:
private Node<E> removeFirstNode() {
if (isEmpty()) return null;
Node<E> answer = this.head;
this.head = this.head.getNext();
answer.next = null; // Set next ptr to null
this.size--;
if (this.size == 0) {
this.tail = null;
}
return answer;
}
該代碼可能看起來像“停止”,因?yàn)檎{(diào)試器嘗試使用 打印出列表toString(),我想它會遍歷列表并且由于循環(huán)而永遠(yuǎn)不會完成。
添加回答
舉報