首页 > 解决方案 > 遍历链表时不会更改头引用

问题描述

我是一个新学习者,正在学习链表和java。

我已经知道当两个引用指向同一个对象时,更改一个引用的字段值也会更改另一个引用字段值的概念。假设我们有以下课程:-

 public class Test {

    int a;

    public static void main(String[] args) {

        Test t=new Test();

        t.a=15;
        System.out.println("a="+t.a); //will print a=15

        Test temp=t;
        temp.a=20;

        System.out.println("a="+t.a); //will print a=20

    }
}

这就是我们所说的浅拷贝,通过一个引用更改对象值将更新指向该对象的所有引用的值。

head同样,我通过临时引用in来遍历下面的代码的链表currNode

public static void printList(LinkedList list) { 
        Node currNode = list.head; 

        while (currNode != null) { 
            System.out.print(currNode.data + " "); 

            currNode = currNode.next; 
        } 
    } 

当我们执行时,为什么当它到达链表末尾时currNode = currNode.next;不更新headto的值?null

标签: javadata-structureslinked-list

解决方案


在第一个示例 ( class Test) 中,您对同一个对象有两个引用,第一个中的任何更改都会影响另一个引用。在第二个示例中也是如此,如果您在第一次迭代时更改头部的数据,它将更改头部的数据,currtNode因为两个引用都指向同一个对象。但是该语句将 tocurrNode = currNode.next;的值更改currNode为指向下一个节点,因此在第一次迭代之后,两个引用head并不currNode指向同一个对象,因为在函数的末尾head!=null


推荐阅读