Java中LinkedList中的指针
我正在研究链表,在理解Java中的引用和指针时遇到了一点问题(还有一些问题我在互联网上找不到答案)。也就是说,我有一个类Java中LinkedList中的指针,java,linked-list,Java,Linked List,我正在研究链表,在理解Java中的引用和指针时遇到了一点问题(还有一些问题我在互联网上找不到答案)。也就是说,我有一个类LinkedList,它使用类节点,如下所示: public class LinkedList { public Node head; public LinkedList(int data) { head = new Node(data); } } 这是我的节点类: public class Node { public int
LinkedList
,它使用类节点
,如下所示:
public class LinkedList {
public Node head;
public LinkedList(int data) {
head = new Node(data);
}
}
这是我的节点类:
public class Node {
public int data;
public Node next;
public Node(int data2) {
data = data2;
}
}
我在LinkedList
中还有方法toStringLL()
,它看起来像:
public void toStringLL() {
LinkedList l=this;
while(l.head.next != null) {
System.out.print(l.head.data+"->");
l.head = l.head.next;
}
System.out.print(l.head.data);
System.out.println("");
}
当我用l.head=l.head.next
遍历链表时,我不明白为什么这个toStringLL()
会改变我的链表头?我的头不应该保持不变吗?我想当我写LinkedList l=this
时,我可以自由地迭代l
,而不会影响this
(或者我错了吗?),但我很难弄明白为什么这是有效的,而前一个是无效的。。有人能给我解释一下这两者的区别吗
l.head=l.head.next;
你改变了你的头。当你设定
l.head=l.head.next;
你改变主意
我不明白当我用l.head=l.head迭代链表时,为什么这个toString()会改变我的链表头。下一步?我的头不应该保持不变吗
当你做作业的时候
LinkedList l = this;
您没有创建新的LinkedList
对象。您只是在定义对现有LinkedList
对象的引用
因此,l.head=l.head.next
的作用与this.head=this.head.next
完全相同。两者都会改变您原来的列表
另一方面,当你写作时
Node n = this.head
您没有更改列表的标题。您正在声明一个变量,该变量最初引用列表的head
,但当您将该变量更改为引用列表的其他节点时,列表的head
变量(this.head
)保持不变
我不明白当我用l.head=l.head迭代链表时,为什么这个toString()会改变我的链表头。下一步?我的头不应该保持不变吗
当你做作业的时候
LinkedList l = this;
您没有创建新的LinkedList
对象。您只是在定义对现有LinkedList
对象的引用
因此,l.head=l.head.next
的作用与this.head=this.head.next
完全相同。两者都会改变您原来的列表
另一方面,当你写作时
Node n = this.head
您没有更改列表的标题。您正在声明一个变量,该变量最初引用列表的
head
,但当您将该变量更改为引用列表的其他节点时,列表的head
变量(this.head
)保持不变。Java没有指针。如果您更改LinkedList l=this
您不是在复制列表,而是在创建另一个变量,该变量引用相同的LinkedList
对象。Java中的变量(非基本类型)是引用,而不是对象本身。请在代码中提供节点n=this。headJava没有指针。当您这样做时,LinkedList l=this
您不是在复制列表,而是在创建另一个变量,该变量引用相同的LinkedList
对象。Java中的变量(非原语类型)是引用,而不是对象本身。请使用Node n=this.head提供代码。您是否清楚OP如何使用Node n=this.head在列表中进行迭代?我的意思是他说这很有效。但区别取决于他如何进一步使用它。@Russiancold我假设OP使用n=n
在使用Node n=this.head时迭代节点您是否清楚OP如何使用Node n=this.head迭代列表?我的意思是他说这很有效。但区别取决于他如何进一步使用它。@Russiancold我假设OP使用n=n
使用节点n=this.head时迭代节点