Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入后如何在linkedlist中的节点之间建立连接_Java_Linked List_Insertion - Fatal编程技术网

Java 插入后如何在linkedlist中的节点之间建立连接

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.

首先,我需要一个解释,而不是一个解决方案。正如您从代码中看到的,我正在尝试将MovieNode插入到MovieList中。方法在MovieList类中。“名单”是我保存电影的地方

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;