2 回答
TA贡献1890条经验 获得超9个赞
为什么每次创建新节点 p.next 时都需要给 this.next 赋值为 null?
在添加和删除节点时,我们必须确保节点不指向非预期节点。他们可能指向了一些节点。
为什么我们需要设置 p = p.next 指向同一个节点
要在遍历列表时定位并保持您在列表中的位置,您可以从头开始,并继续到剩余的节点。如果 p=p.next
,将如何遍历列表?
我们不能只设置 tail = p.next 这是 for 循环完成后的最后一个。
不,我们不能因为在这种情况下p.next
相当于p.p.next
因为p
被设置为p.next
循环内部。通过在之前添加以下内容对其进行测试tail=p
,您应该得到null
System.out.println(p.next);
编辑:
您的列表是单链表,这意味着除尾部之外的每个节点都应该有一个指向下一个节点的指针,您从
head = new Node<>(a[i], null); Node<T> p = head;
在这种情况下p
,head
并指向Node 0
见下图。如果数组中的下一个 NOde 不为空,让我们看看 for 循环中会发生什么
p.next = new Node<>(a[i], null); p = p.next;
在这种情况下p.next
是指向Node 1
(见下图),其中 as p
which 指向Node 0
现在设置为指向 Node 1
。所以两者都指向“节点 1”。最后一个:
tail = p;
你说那我们为什么不tail=p.next
呢?不,我们不能因为在这种情况下p.next
相当于p.p.next
因为p
被设置为p.next
循环内部。
TA贡献1777条经验 获得超10个赞
尝试使用矛盾。如果您没有设置p = p.next
,在循环的下一次迭代中,您将再次将新节点设置为前一个节点的下一个位置。因此,所有的时间p
都是,head
而你不再移动p
了!
因此,您需要p
在设置后在每次迭代中移动p.next
。实际上,它是指向列表最后一个元素的指针。
添加回答
举报