gpt4 book ai didi

java - 指针如何在单链表中工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:58 25 4
gpt4 key购买 nike

我有这个用于单向链表的代码,它可以工作。理论上理解单向链表的原理,但是说到代码就不懂指针是怎么工作的。我的问题出在这两行代码中,它是最后提到的代码的一部分

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

为什么我们通过p调用next创建新节点然后通过参数同时给next赋值null?然后给 p.next 的 p 值应该是空的?我尝试打印出 p.next 和 next 以查看它们是否相同或存在差异,我在控制台中得到了 p.next 的地址和 next 的空地址。他们有什么不同?我需要对这部分代码以及如何创建节点和指针进行一些解释。

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;
}
}

最佳答案

这里有两点需要考虑。指针 p 指向当前节点,即列表中的最后一个节点。p.next 指向下一个节点,如果将添加一个新节点。

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

此行在下一个位置创建一个新节点(您正在向列表末尾添加一个节点)。

p = p.next;

这一行告诉当前指针 p 指向列表末尾新创建的节点(它不是 null,你刚刚在那里创建了一个新节点)。

关于java - 指针如何在单链表中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com