这是从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;
    }

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

除了将引用设置为null之外,您不需要做任何事情。垃圾收集器不会找到任何对该对象的引用,因此它知道它不是活动对象,并将释放内存。

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


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

while (current.Next.Next != null)

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