附加到链表

我想知道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;
    }
}
所以你有一个名为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的新节点,我们将值20设置为data(请记住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

转载注明原文:附加到链表 - 代码日志