dav*_*vid 6 initialization linked-list list
我想知道while循环是如何执行的.因为我们在第一次声明它时将'next'设置为null,它什么时候变为not null?还有什么'节点n =这个; ' 意思?这个代码有意义吗?每当我们声明一个对象Node的新实例时,它是否会从类中复制它自己的单独字段?谢谢你!我一定会欣赏清晰易懂的解释.再次感谢=)
class Node {
Node next = null;
int data;
public Node(int d) { data = d; }
void appendToTail(int d) {
Node end = new Node(d);
Node n = this;
while (n.next != null) { n = n.next; }
n.next = end;
}
}
Run Code Online (Sandbox Code Playgroud)
回答你的问题:
问:"因为我们在第一次声明它时将'next'设置为null,它什么时候变为not null?"
如果列表中只有一个项目,则该节点的"下一个"值将设置为NULL.
问:"还有'节点n =这个','是什么意思?"
此语句表示引用变量"n"采用当前对象的引用,该引用由"this"指定.
问:"每当我们声明一个对象Node的新实例时,它是否会从类中复制出自己独立的字段?"
将为您创建实例的每个单独的类创建实例变量.这意味着每个节点都有"下一个"和"数据".
因此,在您的创建过程中,您可能会遇到以下情况:

此外,while循环迭代到列表的末尾,并将该项追加到列表中的最后一个节点之后.
希望它有所帮助(:如果您有任何疑问,请回复(:
所以你有一个名为Node的类,它有两个名为next和data的实例变量.它们被称为实例变量,因为它们属于此类的实例而不是类本身.也就是说,您的类基本上是对象的模板(或蓝图),每个对象都有自己的数据值和下一个值.
为了创建Node类的实例,您需要调用构造函数并传递必要的参数.在你的情况下,构造函数是;
public Node(int d) {
data = d;
}
Run Code Online (Sandbox Code Playgroud)
要调用此构造函数,请使用new关键字(在Java中我假设),就像这样;
Node x = new Node(10);
Run Code Online (Sandbox Code Playgroud)
请注意,您必须为构造函数提供整数值.在构造函数的主体中(在{}之间),您会看到变量数据被赋值给d中的值,这是您传递给构造函数的值,在此示例中为值10.现在您有一个类型的对象节点的值为10作为数据,空值为下一个节点.
在该对象上,您现在可以调用方法appendToTail().让我们说这样做:
x.appendToTail(20);
Run Code Online (Sandbox Code Playgroud)
让我们追踪发生的事情.
Node end = new Node(d);
Run Code Online (Sandbox Code Playgroud)
创建了一个名为end的新节点,我们将值20设置为data(请记住d现在的值为20,因为这是我们调用方法时传递的值).这是x中完全独立的节点,具有自己唯一的数据值.
Node n = this;
Run Code Online (Sandbox Code Playgroud)
这是对当前对象的自引用.因为我们在x上调用了这个方法,所以这和x是同一个对象.
while (n.next != null) {
n = n.next;
}
Run Code Online (Sandbox Code Playgroud)
这个while循环将从当前节点到下一个节点开始寻找列表的结尾,直到下一个节点为空.由于我们到目前为止创建的唯一节点是x,因此n.next实际上为null,因此while循环不执行此时间.
n.next = end;
Run Code Online (Sandbox Code Playgroud)
现在我们将n的下一个值(即x)设置为创建的节点端.你现在有一个这样的列表:
10 -> 20 -> null
Run Code Online (Sandbox Code Playgroud)
假设您要进行以下调用:
x.appendToTail(30);
Run Code Online (Sandbox Code Playgroud)
然后发生类似的事情,除非你到达while循环时,值n.next不为null,所以你进入循环体并指定n指向n.next,在我们的例子中是20的节点.循环的下一次迭代将产生null,因此循环将退出,具有数据30的新节点将被设置为列表中最后一个节点的下一个值.所以你将拥有:
10 -> 20 -> 30 -> null
Run Code Online (Sandbox Code Playgroud)