1 回答

TA貢獻1780條經驗 獲得超4個贊
的實現removeFirstNode()不會取消節點的下一個指針的鏈接。
原始鏈表中,第一個節點的next指針指向第二個節點,第二個節點的next指針為空。
在新鏈表中,第一個節點的 next 指針將指向第二個節點,但第二個節點的 next 指針將指向第一個節點(以前是第二個節點)。
像這樣的東西(原始列表):
+---+ +---+
| A |--->| B |--->null
+---+ +---+
當重新排序時變成這樣,因為 A 的下一個指針仍然指向 B:
+---+ +---+
| B |--->| A |---+
+---+ +---+ |
^ |
| |
+--------------+
您可以將您的removeFirstNode()實現更改為如下所示:
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;
}
該代碼可能看起來像“停止”,因為調試器嘗試使用 打印出列表toString(),我想它會遍歷列表并且由于循環而永遠不會完成。
添加回答
舉報