这是从c#中删除链表尾部的正确方法吗?
本文关键字:方法 尾部 链表 删除 | 更新日期: 2023-09-27 18:11:32
在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