【问题标题】:how pointer works in singly linked list?指针如何在单链表中工作?
【发布时间】:2018-10-06 02:41:34
【问题描述】:

我有这个用于单链表的代码,它可以工作。我从理论上理解单链表的原理,但是当涉及到代码时,我不明白指针是如何工作的。我的问题在于这两行代码,这是最后提到的代码的一部分

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

为什么我们通过p调用next并创建新节点然后通过参数同时将null分配给next。?然后给出 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.next,然后将p 设置为这个新节点。
  • 但在我将 p 设置为新节点之前,我将参数中的 null 发送到构造函数,然后更改为 null 所以不应该 p = p.next = null;还有吗?
  • p 不是您的新对象。请了解 OOP 的基础知识。
  • 那么 p.next 是什么?
  • 你的新Node

标签: java algorithm pointers nodes


【解决方案1】:

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

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

这一行在下一个位置创建了一个新节点(您正在将一个节点添加到列表的末尾)。

p = p.next;

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

【讨论】:

  • 好的,我的朋友我明白了,p.next 是一个新节点,p 指向这个节点。现在通过参数我们设置next到null那有什么好处,这一步在链表中扮演什么角色?
  • 您必须将 p.next 设置为某些内容。如果 p 在列表的末尾,它不应该指向任何东西。因此它指向 null。
猜你喜欢
  • 2023-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多