遍历链表时不会更改头部引用



我是一个新学习者,正在学习链表和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
}
}

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

同样,我通过以下代码遍历链表,方法是在currNode中临时引用head

public static void printList(LinkedList list) { 
Node currNode = list.head; 
while (currNode != null) { 
System.out.print(currNode.data + " "); 
currNode = currNode.next; 
} 
} 

为什么currNode = currNode.next;没有将head的值更新为null,因为它到达链表的末尾,就像我们正在执行的那样?

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

相关内容

  • 没有找到相关文章

最新更新