gpt4 book ai didi

c# - Linked Lists : When adding a element why is current. next指向新节点,为什么要覆盖当前节点

转载 作者:太空狗 更新时间:2023-10-29 20:09:18 25 4
gpt4 key购买 nike

我是 C# 的初学者,我正在通过解决数据结构案例场景来学习它。我需要帮助可视化以下代码片段中发生的情况

public void AddAtLast(object data)
{
Node newNode = new Node();
newNode.Value = data;
current.Next = newNode;
current = newNode;
Count++;
}

我了解了哪些部分

我知道在链表的末尾添加了一个新节点。此外,新节点从函数参数中获取其值。

我需要什么帮助

我特别在想为什么 current.Next指向 newNode ,它不应该指向 NULL,因为我的 newNode将被放置在链表的末尾,因此它应该指向 NULL。

还有,我们为什么要做 current=newNode ?

我明白为什么 count++存在可能是因为想要跟踪添加新元素的位置,但如果我的理解有误,请纠正我。

最佳答案

因此,让我们逐行查看 AddAtLast(object data) 中发生的情况。 Linked List的方法类(class)

  • Node newNode = new Node();

  • 创建一个新节点,这是 AddAtLast方法人生目标
  • newNode.Value = data;

  • 将一些数据分配给节点
  • current.Next = newNode;

  • 分配 newNode创建于 Current .这是链接列表的链接部分
  • current = newNode;

  • 覆盖 Current (这一定看起来很奇怪);我稍后会详细解释这一点。
  • Count++

  • 增加 CountLinked List ,很高兴知道一个列表的大小,而不必遍历它的所有元素。这只是始终知道计数的一种快捷方式。

    你要记住的第一件事
    在 C#(和许多其他语言)中,对象/类是 Reference Type .创建时 Current (或任何其他对象/类)你正在做两件事。
  • 保留内存的物理部分并用新对象填充它
  • 创建指向该内存的引用(又名地址,又名指针)。把地址想象成一个 Post-It-Note到你家某处存在的东西。

  • 当你覆盖一个引用时,你实际上并没有破坏内存,就像你在便利贴上写下地址并写下其他东西一样。你的鞋子还在柜子里。 .Net 中唯一的异常(exception)是如果没有更多的引用留给您对象/类 Garbage Collector (你妈妈)会来把它清理干净然后扔掉。
    调用 current = newNode;似乎我们只是丢失了覆盖它,并丢失了对该节点的所有引用(我们上次跟踪),但我们没有。

    第二件要记住的事情
    Clever-Clogs发明链表的人知道我们必须以某种方式跟踪项目,所以他们设想当一个节点被添加时,某个其他节点需要有一个链接到它。
    这就是这行代码 ( current.Next = newNode ) 的全部内容。确保它在列表中实际链接。是的,所以我们覆盖了它,但我们现在知道,当其他人正在引用节点时,它不会被清理。此外,如果我们想再次找到它,我们所要做的就是找到第一个 Node 并遍历链接。

    另一种思考方式
    想想 Current作为一个桶,在那个桶里你有一个节点,在那个节点上有一张纸,叫做 next。
  • 有人递给你一个新节点。
  • 您刻意在当前存储桶中的节点上写下这个新节点(有人给我们的)的名称(Next/Link 每个节点都有的便利贴)
  • 您将桶倒在地板上,然后将新节点放入桶中。

  • 但是你必须记住,你提示的节点仍然在某个地方(事实上,可能还有另一个节点也有它的名字,就像你在 上写了你的新节点新名称一样。 )。虽然我们不能轻易访问它们,但如果我们遍历 Linkages,它们仍然存在
    本质上,这就是链表的工作方式,它只是一堆节点,上面写着其他节点名称。
    我们使用 Current/Temp 等工具跟踪列表, 和 First/Head (Buckets) 在封装这个逻辑的类中。有时我们有一个 Count更容易知道我们正在跟踪多少个节点。诚然,链表最重要的部分是 First/Head桶。没有它,我们无法遍历列表。 Current/Temp在您的原始方法中,我们很容易找到最后一个节点,因此您不必遍历列表即可找到它
    示例
    enter image description here

    关于c# - Linked Lists : When adding a element why is current. next指向新节点,为什么要覆盖当前节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53006980/

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