gpt4 book ai didi

c# - 这是从 C# 中的链表中删除尾部的正确方法吗

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:02 26 4
gpt4 key购买 nike

这是通过简单地将指针设置为空来从 C# 中的链表中删除尾部的正确方法吗?我如何实际释放节点。我是否需要实现 Idispose

public void DeleteTail()
{
if (head == null)
{
throw new InvalidOperationException("you cannot delete from an empty list.");
}
SingleLinkedListNode<T> current = head;

while (current.Next.Next != null)
{
current = current.Next;
}

//delete the node
current.Next = null;
}

//Appends a node to the linked list
public SingleLinkedListNode<T> AppendNode(T value)
{
SingleLinkedListNode<T> newNode = new SingleLinkedListNode<T>(value, null);
if (head == null)
{
head = newNode;
}
else
{
SingleLinkedListNode<T> current = head;

while (current.Next != null)
{
current = current.Next;
}
current.Next = newNode;
}


return newNode;
}

最佳答案

除了将引用设置为 null 外,您无需执行任何操作。垃圾收集器不会找到对该对象的任何引用,因此它知道它不是事件对象并会释放内存。

如果您拥有非托管 资源(例如数据库连接或文件句柄),您只需要实现IDisposable。然后,当您不再需要它时,您应该在您的节点上显式调用 Dispose,以便尽快释放它持有的资源。


你还应该注意到你的程序有错误。如果您的列表只包含一个元素,此行将抛出一个 NullReferenceException:

while (current.Next.Next != null)

您还需要检查 head.Next == null

关于c# - 这是从 C# 中的链表中删除尾部的正确方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776025/

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