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

时间:2013-05-05 19:51:42

标签: java linked-list insertion

首先,我需要解释而不是解决方案。从代码中可以看出,我正在尝试将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替换元素时,我们也改变了列表中元素之前的节点的后继。我们指出我们的新元素即节点的继承者。我是这个主题的新手,所以我很抱歉我可能犯过的错误。

2 个答案:

答案 0 :(得分:1)

有区别:

element.previous.next = node;

会使之前的'element next field 指向节点,即它会更改之前的元素。

element = node;

只会为本地变量元素分配(新)节点 - 所以它接近无操作。

答案 1 :(得分:0)

elementreferenceMovieNodeelement.previous.next是对同一MovieNode的另一个引用。这两者之间的区别在于element是函数范围内的临时引用;但是element.previous.next是由element.previous节点保存的引用,该节点在此范围之外定义。

重要的是要记住,在Java中a = b ab是对象,意味着ab引用同一个对象。如果您修改ab也会更改。

这就是你在函数开头复制MovieNode的原因:有效地复制节点而不是引用它。其余的做法只是操纵previousnext引用而不处理实际对象。