为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2021-10-28 17:03:30
我有这个用于单向链表的代码,它可以工作。理论上我理解单向链表的原理,但是说到代码我不明白指针是如何工作的。我的问题是在这两行代码中,它是最后提到的代码的一部分p.next = new Node<>(a[i], null);p = p.next;为什么我们通过 p 调用 next 并创建新节点,然后通过参数同时将 null 分配给 next。?然后给出应该为空的 p.next 的 p 值?我试图打印出 p.next 和 next 以查看它们是否相同或存在差异,并且我在控制台中获得了 p.next 的地址,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;    }}
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

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

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

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

p = p.next;

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


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信