c# – 链接列表:添加元素时为什么是current.Next指向新节点,为
我是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? 我理解为什么计数存在可能是因为想要跟踪添加新元素的位置,但如果我的理解错误,请纠正我. 解决方法
因此,让我们看看在
Linked List类的AddAtLast(对象数据)方法中逐行发生的事情
>节点newNode = new Node(); 创建一个新的Node,这是生活中AddAtLast方法的目标 > newNode.Value = data; 将一些数据分配给节点 > current.Next = newNode; 将创建的newNode分配给Current.这是链接列表的链接部分 > current = newNode; 覆盖当前(这看起来很奇怪)以后会对此进行更多的解释. >数 增加链表的计数,很高兴知道列表的大小,而不必遍历其所有元素.这只是一个总是知道计数的简单方法. 你要记住的第一件事 在C#(和许多其他语言)中,对象/类是Reference Type.当您创建Current(或任何其他对象/类)时,您正在做两件事. >保留内存的物理部分并使用新对象填充它 当你覆盖一个引用时,你实际上并没有破坏内存,就像你在Post-It-Note上写下地址并写下其他内容一样.你的鞋仍然住在橱柜里.在.Net中唯一的例外是,如果没有更多的引用留给你的对象/类,Garbage Collector(你的妈妈)会来清理并丢弃它. 通过调用current = newNode;看起来我们刚刚丢失了覆盖它,并丢失了对该节点的所有引用(我们上次跟踪),但我们没有. 要记住的第二件事 投资到Linked List的Clever-Clogs知道我们必须以某种方式跟踪项目,因此他们设想在添加Node时,某个其他节点需要有一个链接到它. 这就是这行代码(current.Next = newNode)的全部内容.确保它实际链接在列表中.是的,所以我们覆盖了它,但我们现在知道,当其他人正在引用节点时,它不会被清除.另外,如果我们想再次找到它,我们所要做的就是找到第一个Node并遍历链接. 另一种思考方式 将Current视为一个存储桶,在该存储桶中有一个节点,在该节点上是一张名为next的纸. >有人递给你一个新节点. 但你必须记住,你提示的Node仍然在某个地方(实际上,可能还有另一个Node上有它的名字,就像你在它上面写了新的Nodes新名字一样).虽然,我们无法轻易访问它们,但如果我们遍历链接,它们仍然存在 从本质上讲,这就是链接列表的工作方式,它只是一堆节点,其上写有其他节点名称. 我们使用封装此逻辑的类中的Current / Temp和First / Head(Buckets)等工具跟踪列表.有时我们有一个Count可以更容易地知道我们跟踪的节点数量.尽管如此,链接列表中最重要的部分是First / Head存储桶.没有它我们就无法遍历这个清单. 原始方法中的Current / Temp只是让我们很容易找到最后一个节点,因此您不必遍历列表来查找它 例 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |