1 回答
TA贡献1780条经验 获得超3个赞
的实现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(),我想它会遍历列表并且由于循环而永远不会完成。
添加回答
举报