0

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

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 与 element 本身是一样的,因为当我们用节点替换 element 时,我们也会更改列表中元素之前的节点的后继节点。我们将后继者指向我们的新元素节点。我是这个主题的新手,所以我很抱歉我可能犯的错误。

4

2 回答 2

1

它们是有区别的:

element.previous.next = node;

将使前一个'元素下一个字段指向节点,即它将改变前一个元素。

element = node;

只会用(新)节点分配局部变量元素 - 所以它接近于无操作。

于 2013-05-05T19:55:55.227 回答
0

elementis a referenceto a MovieNode, element.previous.nextis another reference to the same MovieNode。这两者的区别在于element你的函数范围内的临时引用;但是,这是在此范围之外定义element.previous.next的节点所持有的引用。element.previous

重要的是要记住,在 Java 中说a = bwhereabare objects,意味着ab引用同一个对象。如果你修改ab也会改变。

这就是为什么您MovieNode在函数的开头复制了 : 以有效地复制节点而不是引用它。其余的做作只是操纵previous​​和next引用而不处理实际对象。

于 2013-05-05T20:17:13.467 回答