gpt4 book ai didi

list - 附加到链表

转载 作者:行者123 更新时间:2023-12-04 06:14:22 26 4
gpt4 key购买 nike

我想知道while循环是如何执行的。由于我们在初次声明时将“next”设置为null,因此何时将其更改为非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;
}
}

最佳答案

因此,您有一个名为Node的类,其中有两个实例变量分别称为next和data。它们之所以称为实例变量,是因为它们属于此类的实例,而不是属于类本身。也就是说,您的类基本上是对象的模板(或蓝图),每个对象将具有自己的数据值和下一个值。

为了创建Node类的实例,您需要调用构造函数并传递必要的参数。在你的情况下,构造函数是;

  public Node(int d) { 
data = d;
}

要调用此构造函数,您可以像这样使用new关键字(我假设使用Java);
   Node x = new Node(10);

并注意您必须向构造函数提供一个整数值。在构造函数的主体中(在{}之间),您将看到变量数据已分配给d中的值,该值是您传递给构造函数的值,在本示例中为值10。值为10的数据节点,下一个节点为空。

现在,可以在该对象上调用方法appendToTail()。可以说我们这样做:
   x.appendToTail(20);

让我们跟踪发生了什么。
    Node end = new Node(d);

创建一个名为end的新节点,并将data的值设置为20(请记住d的值现在为20,因为这是我们在调用该方法时传递的值)。这是与x完全独立的节点,具有自己的唯一数据值。
    Node n = this;

这是对当前对象的自引用。由于我们在x上调用了此方法,因此它是与x相同的对象。
    while (n.next != null) { 
n = n.next;
}

从当前节点到下一个节点,直到下一个节点为空,此while循环将开始查找列表的末尾。由于到目前为止我们创建的唯一节点是x,因此n.next实际上为null,因此while循环这次不执行。
    n.next = end;

现在,我们将n的下一个值(即x)设置为所创建的节点端。您现在有一个像这样的列表:
  10 -> 20 -> null

假设您要进行以下调用:
  x.appendToTail(30);

然后发生类似的事情,除了进入while循环时,n.next的值不为null,因此进入循环的正文并将n指向n.next,在我们的示例中为具有20的节点。循环的下一次迭代将产生null,因此循环将退出,并将具有数据30的新节点设置为列表中最后一个节点的下一个值。因此,您将拥有:
  10 -> 20 -> 30 -> null

关于list - 附加到链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com