首先,我需要解释而不是解决方案。从代码中可以看出,我正在尝试将MovieNode插入到MovieList中。该方法在MovieList类中。 “list”是我保留MovieNodes的地方。
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.previous.next = node;
有了这个;
element = node;
插入后链接列表没有变化。在我看来,element.previous.next与元素本身是一回事,因为当我们用node替换元素时,我们也改变了列表中元素之前的节点的后继。我们指出我们的新元素即节点的继承者。我是这个主题的新手,所以我很抱歉我可能犯过的错误。
答案 0 :(得分:1)
有区别:
element.previous.next = node;
会使之前的'element next field 指向节点,即它会更改之前的元素。
element = node;
只会为本地变量元素分配(新)节点 - 所以它接近无操作。
答案 1 :(得分:0)
element
是reference
到MovieNode
,element.previous.next
是对同一MovieNode
的另一个引用。这两者之间的区别在于element
是函数范围内的临时引用;但是element.previous.next
是由element.previous
节点保存的引用,该节点在此范围之外定义。
重要的是要记住,在Java中a = b
a
和b
是对象,意味着a
和b
引用同一个对象。如果您修改a
,b
也会更改。
这就是你在函数开头复制MovieNode
的原因:有效地复制节点而不是引用它。其余的做法只是操纵previous
和next
引用而不处理实际对象。