每个节点在链表中扮演什么角色?

为什么每次我们创建新节点时p.next都需要将null分配给this.next?无论如何都不总是空的?它扮演什么角色LinkedList?如果我们尝试将其打印出来this.next,则在将其分配给null之前它将为null。


System.out.println(this.next);

结果为空


另外如果p.next指向新的node为什么我们需要设置p = p.next指向同一个节点?如果目的是最后将tail设置为p,我们不能只设置tail = p.nextfor循环完成后的最后一个。


public class EnkeltLenketListe<T>{

private T value;

private Node<T> next;


private Node(T value, Node<T> next)

{

System.out.println(this.next);

    this.next = next;

    this.value = value;

}

}


private Node<T> head, tail;


public EnkeltLenketListe(T[] a)

{

this();


int i = 0; for (; i < a.length && a[i] == null; i++);


if (i < a.length)

{

    head = new Node<>(a[i], null);

    Node<T> p = head;


    for (i++; i < a.length; i++)

    {

        if (a[i] != null)

        {

            p.next = new Node<>(a[i], null);

            p = p.next;

        }

    }

    tail = p;

}

}


斯蒂芬大帝
浏览 123回答 2
2回答

当年话下

为什么每次创建新节点 p.next 时都需要给 this.next 赋值为 null?在添加和删除节点时,我们必须确保节点不指向非预期节点。他们可能指向了一些节点。为什么我们需要设置 p = p.next 指向同一个节点要在遍历列表时定位并保持您在列表中的位置,您可以从头开始,并继续到剩余的节点。如果&nbsp;p=p.next,将如何遍历列表?我们不能只设置 tail = p.next 这是 for 循环完成后的最后一个。不,我们不能因为在这种情况下p.next相当于p.p.next因为p被设置为p.next循环内部。通过在之前添加以下内容对其进行测试tail=p,您应该得到nullSystem.out.println(p.next);编辑:您的列表是单链表,这意味着除尾部之外的每个节点都应该有一个指向下一个节点的指针,您从head&nbsp;=&nbsp;new&nbsp;Node<>(a[i],&nbsp;null); Node<T>&nbsp;p&nbsp;=&nbsp;head;在这种情况下p,head并指向Node 0见下图。如果数组中的下一个 NOde 不为空,让我们看看 for 循环中会发生什么&nbsp;&nbsp;&nbsp;&nbsp;p.next&nbsp;=&nbsp;new&nbsp;Node<>(a[i],&nbsp;null); &nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;p.next;在这种情况下p.next是指向Node 1(见下图),其中 as&nbsp;pwhich 指向Node 0现在设置为指向&nbsp;Node 1。所以两者都指向“节点 1”。最后一个:tail&nbsp;=&nbsp;p;你说那我们为什么不tail=p.next呢?不,我们不能因为在这种情况下p.next相当于p.p.next因为p被设置为p.next循环内部。

不负相思意

尝试使用矛盾。如果您没有设置p = p.next,在循环的下一次迭代中,您将再次将新节点设置为前一个节点的下一个位置。因此,所有的时间p都是,head而你不再移动p了!因此,您需要p在设置后在每次迭代中移动p.next。实际上,它是指向列表最后一个元素的指针。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java