java – 每个Node在链表中扮演哪个角色?
为什么每次我们创建新节点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; } } 解决方法
在添加和删除节点时,我们必须确保节点不指向非预期的节点.他们可能指向某些节点.
在遍历列表时查找并维护列表中的位置,从头开始,继续保留节点.如果p = p.next,如何遍历列表?
不,我们不能,因为在这种情况下,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在循环内设置为p.next. read about singly linked list here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |