java – 每个Node在链表中扮演哪个角色?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 每个Node在链表中扮演哪个角色?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1933字,纯文字阅读大概需要3分钟。
内容图文
为什么每次我们创建新节点p.next所以我们需要为this.next分配null?并不总是空的吗?它在LinkedList中扮演的角色是什么?
如果我们尝试打印出this.next,在将它指定为null之前它将为null.
System.out.println(this.next);
结果为空
另外,如果p.next指向新节点,为什么我们需要设置p = p.next指向同一个节点?如果最后将tail设置为p的目的,我们不能只设置tail = p.next,这是for循环结束后的最后一个.
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;
}
}
解决方法:
Why each time we create new node p.next so we need to assign null to this.next?
在添加和删除节点时,我们必须确保节点不指向非预期的节点.他们可能指向某些节点.
why we need to set p = p.next to point to the same node
在遍历列表时查找并维护列表中的位置,从头开始,继续保留节点.如果p = p.next,如何遍历列表?
can’t we just set tail = p.next which is the last one after for loop is finished.
不,我们不能,因为在这种情况下,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指向节点0,见下图.如果数组中的下一个NOde不为null,那么让我们看看for循环中会发生什么
p.next = new Node<>(a[i], null);
p = p.next;
在这种情况下,p.next指向节点1(参见下图),其中指向节点0的p现在设置为指向节点1.因此两者都指向“节点1”.最后一个:
tail = p;
你说为什么我们不只是tail = p.next?不,我们不能,因为在这种情况下,p.next等同于p.p.next,因为p在循环内设置为p.next.
read about singly linked list here
内容总结
以上是互联网集市为您收集整理的java – 每个Node在链表中扮演哪个角色?全部内容,希望文章能够帮你解决java – 每个Node在链表中扮演哪个角色?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。