Java 插入后如何在linkedlist中的节点之间建立连接
首先,我需要一个解释,而不是一个解决方案。正如您从代码中看到的,我正在尝试将MovieNode插入到MovieList中。方法在MovieList类中。“名单”是我保存电影的地方Java 插入后如何在linkedlist中的节点之间建立连接,java,linked-list,insertion,Java,Linked List,Insertion,首先,我需要一个解释,而不是一个解决方案。正如您从代码中看到的,我正在尝试将MovieNode插入到MovieList中。方法在MovieList类中。“名单”是我保存电影的地方 public void insert(Movie movie, int index) { MovieNode node = new MovieNode(movie); MovieNode element; MovieNode current = list; while(current.
public void insert(Movie movie, int index)
{
MovieNode node = new MovieNode(movie);
MovieNode element;
MovieNode current = list;
while(current.previous != null)
current = current.previous;
element = current; // first node in the list
for(int n = 1; n < index; n++)
element = element.next; // determines where to put new node
node.next = element;
element.previous.next = node;
}
用这个,
element = node;
插入后,linkedlist中没有任何更改。在我看来,element.previous.next与元素本身是一样的,因为当我们用node替换元素时,我们也会更改列表中元素之前的节点的后续项。我们指出了新元素的后继元素,节点。我对这门学科不熟悉,所以我为我可能犯的错误感到抱歉 有一个区别:
element.previous.next = node;
将使上一个“元素”下一个字段指向节点,即它将更改上一个元素
element = node;
将只分配带有(新)节点的局部变量元素-因此它接近no-op。
元素
是对MovieNode
的引用。元素。previous。next
是对同一MovieNode
的另一引用。这两者之间的区别在于,元素
是您功能范围内的临时引用;但是元素.previous.next
是由元素.previous
节点持有的引用,该节点在此范围之外定义
重要的是要记住,在Java中说a=b
其中a
和b
是对象,这意味着a
和b
指的是同一个对象。如果修改a
,b
也将更改
这就是为什么要在函数开头复制MovieNode
:有效地复制节点,而不是引用它。其余的矫揉造作只是操纵前面的
和后面的
引用,而不处理实际对象。感谢您的快速回复。我刚刚意识到,我还必须在代码中添加“node.previous=element.previous;”行。我的意思是,当我从元素之前的节点连接到新节点时,我还必须进行反向连接。在我观看的学习主题的视频中,他们只是说,当你在linkedlist中插入一个新节点时,你必须首先将这个新节点的后续节点指向给定插入索引的节点,然后用新节点更改旧节点。是否有更简单的方法来执行插入操作?谢谢您的解释。现在我更明白了,不客气。我刚刚读了你对欧根回答的评论。你说得对,你只在前进方向连接了节点。这是一个双向连接的双链接列表,通常这种列表的两端都应该有一个引用。再次感谢。根据您的回答,我刚刚编写了remove方法,效果很好。在看到您的解释之前,我实际上不理解java中的引用:)。
element = node;