在Java中更改链接列表节点的变量值。

时间:2018-07-02 14:45:20

标签: java memory data-structures linked-list

在下面的代码中,当我将节点变量2更改为null时,第一个节点变量one的下一个值为2怎么会这样呢?

 public static void main(String[] args) {
    Node one = new Node(1);
    Node two = new Node(2);
    one.next = two;

    System.out.println(one.val + ", " + one.next.val); //1, 2
    two = null; //one.next.val is still 2
    System.out.println(one.val + ", " + one.next.val); //1 ,2
}

static class Node {
    int val;
    Node next;
    public Node(int val) {
    this.val = val;
    }
}

2 个答案:

答案 0 :(得分:0)

您需要将one.next的引用设置为null,以使其不存在。线

two = null;

将对象2设置为指向null,并且不再指向具有val 2的上一个节点,但是该对象继续存在,并且一个节点仍然指向它。

one.next = null; 

将one.next指向null之后,便不再有对该对象的引用,并且该对象会在以后由垃圾收集器丢失和收集

答案 1 :(得分:0)

创建时:

Node one = new Node(1);
Node two = new Node(2);

您创建两个Node对象,即Node(1)Node(2)以及两个引用(即onetwo

现在,当您这样做

one.next = two;

您不是在创建任何新对象,而是对Node(2)对象的新引用。

因此,现在您有两个对象(Node(1)Node(2))和三个引用,即onetwoone.next

完成时

two = null;

它将删除引用two。但是请注意,您仍然可以通过第二个引用Node(2)访问one.next对象。