反转链接列表中的错误

时间:2017-08-29 14:37:53

标签: java pointers linked-list

当我们改变另一个指向同一地址的指针时,指针是否会被改变

撤消链接列表的代码

 Node Reverse(Node node) {
    Node prev = null;
    Node current = node;
    Node next = null;
   Node n = null;
    while (current != null) {
         n = current;
         next = current.next;       //this works
         n.next = prev;
    //  next = current.next;      //this does not
        prev = n;
     current = next;
    }
    node = prev;
    return node;
}

的疑问: Node n如何影响节点当前。当我写n.next时,当前受到影响,但为什么呢?

2 个答案:

答案 0 :(得分:2)

@Gaurav Anand

是的,它确实会影响当前的值,因为节点当前和n具有相同的地址,对任一变量所做的任何更改都将反映在地址中的值将发生变化。< / p>

在你的代码中:
当next = current.next放在n.next = prev之后它不起作用,因为你已经将 n.next 的值更改为与 current.next相同为NULL (prev = NULL)因为节点当前和n具有相同的地址。

所以,如果你在n.next = prev之后使用place next = current.next,那么current = NULL并且循环将停止迭代。

答案 1 :(得分:1)

这是因为n仅指向当前。 2个引用指向同一个对象,因此当您更改n.next时,更改也会反映在current.next中