【发布时间】:2021-04-27 03:21:37
【问题描述】:
我正在关注 CCI 书籍,它具有以下内容作为最基本的链表实现。
class Node {
Node next = null;
int data;
public Node (int data) { this.data = data; }
void appendToTail(int d){
Node iterHead = this;
Node newNode = new Node(d);
while(iterHead.next != null){
iterHead = iterHead.next;
}
iterHead.next = newNode;
}
}
我知道我们将通过此处对头节点的引用来访问该列表。作者提到这个实现是有问题的,因为 - 我解释说,“如果多个对象需要对列表的引用,并且头部发生变化,一些旧对象可能指向旧头部”
我不太明白她在这种情况下“改变头部”的意思,以及它将如何影响使用列表引用的其他对象。也许有人可以通过一个例子帮助我理解这一点。第一次在这里发帖,如果有任何帮助,我将不胜感激。
【问题讨论】:
-
在你的例子中,你总是追加到尾部而不是改变头部。所以这个问题在这里适用。首先,也许尝试运行一个适合您的问题的示例。任何方式上的良好实施都不会出现问题! (始终应正确链接对象,无论如何制作自定义列表或调用哪种类型的操作)
-
你的意思是这个问题*不适用于这里,对吧?如果我上面的实现以某种方式扩展,以便我可以在前面添加节点从而改变头部,那么我可以理解这是怎么回事。
-
是的,在您的情况下不适用,因为添加到尾部。但是当然你可以扩展列表以添加到头,从头尾删除元素,添加到特定索引。然后你应该检查所有情况。不完整的实施可能会导致问题。 (认为作者可能会警告一些不完整的实现,意味着有些情况没有涵盖然后问题)
-
是的,我现在明白了。谢谢!
标签: java algorithm oop linked-list