我有用于单链表的代码,它可以工作。我从理论上理解单链列表的原理,但是当涉及到代码时,我不了解指针的工作原理。我的问题是在这两行代码中,这是最后一部分提到的代码的一部分
p.next = new Node<>(a[i], null);
p = p.next;
为什么我们用p调用next并创建新节点,然后通过参数同时将null分配给next?然后给出p.next的p值,该值应该为null?我试图打印出p.next和next,看它们是否相同或有区别,我在控制台中找到了p.next的地址,下一个为null。它们之间有何不同?我需要在这部分代码中进行一些解释,以及如何创建节点和指针。
public class EnkeltLenketListe<T> implements Liste<T> {
private static final class Node<T>
{
private T value;
private Node<T> next;
private Node(T value, Node<T> next)
{
this.next = next;
this.value = value;
}
}
private Node<T> head, tail;
private int counter;
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;
counter = 1;
for (i++; i < a.length; i++)
{
if (a[i] != null)
{
p.next = new Node<>(a[i], null);
p = p.next;
counter++;
}
}
tail = p;
}
}
答案 0 :(得分:0)
这里有两个指针需要考虑。 指针p指向当前节点,该节点是列表中的最后一个节点。 p.next指向添加新节点后的下一个节点。
p.next = new Node<>(a[i], null);
此行在下一个位置创建一个新节点(您正在将一个节点添加到列表的末尾)。
p = p.next;
此行告诉当前指针p指向列表末尾的新创建的节点(它不为null,您只是在此处创建了一个新节点)。