java - 指针如何在单链表中工作?
问题描述
我有这个用于单链表的代码,它可以工作。我从理论上理解单链表的原理,但是当涉及到代码时,我不明白指针是如何工作的。我的问题在于这两行代码,这是最后提到的代码的一部分
p.next = new Node<>(a[i], null);
p = p.next;
为什么我们通过p调用next并创建新节点然后通过参数同时将null分配给next。?然后给出 p.next 的 p 值,它应该为空?我试图打印出 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;
}
}
解决方案
这里有两个指针需要考虑。指针 p 指向当前节点,即列表中的最后一个节点。p.next 指向如果将添加一个新节点将是下一个节点。
p.next = new Node<>(a[i], null);
此行在下一个位置创建一个新节点(您正在将一个节点添加到列表的末尾)。
p = p.next;
这一行告诉当前指针 p 指向列表末尾新创建的节点(它不为空,您只是在那里创建了一个新节点)。
推荐阅读
- javascript - 如何在 React 网站中实现这种滚动动画?
- javascript - 将 json 文件加载到 iOS Cordova 中不起作用
- scala - 使用 Scala 案例类构造函数作为方法调用时的类型不匹配
- spring - 仅针对错误对象的 Spring 事务回滚并为其隐藏堆栈跟踪
- extjs - 在同一事件上绑定 keyMap,但使用 CTRL 且没有 CTRL
- python - 变量的默认值
- ant - 想要热部署我更改的每个文件,而不是使用 ant 执行构建部署
- selenium - webdriver-manager 不被识别为内部或外部命令,尽管我在全球范围内安装了量角器(Jenkins)
- appcelerator - Appcelerator 看不到设备是 iPad 吗?发生了什么?
- python - 如何以编程方式运行/调用烧瓶 cli 命令?