2 Stimmen

Ist dies der richtige Weg zum Löschen des Schwanzes aus der verknüpften Liste in c#

Ist dies der richtige Weg zum Löschen des Schwanzes aus der verknüpften Liste in c# durch einfaches Setzen des Zeigers auf null, wie ich tatsächlich den Knoten freigeben. Brauche ich Idispose zu implementieren

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;
    }

2voto

Mark Byers Punkte 761508

Sie müssen nichts weiter tun, als den Verweis auf null . Der Garbage Collector findet keine Verweise auf das Objekt, weiß also, dass es sich nicht um ein lebendes Objekt handelt und gibt den Speicher frei.

Sie müssen nur Folgendes implementieren IDisposable wenn Sie die unverwaltet Ressourcen (z. B. eine Datenbankverbindung oder ein Dateihandle). Dann sollten Sie explizit Dispose auf Ihrem Knoten, wenn Sie ihn nicht mehr benötigen, um die darin enthaltenen Ressourcen so schnell wie möglich freizugeben.


Sie sollten auch beachten, dass Sie einen Fehler in Ihrem Programm haben. Wenn Ihre Liste nur ein Element enthält, wird in dieser Zeile ein NullReferenceException :

while (current.Next.Next != null)

Sie müssen auch Folgendes überprüfen head.Next == null .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X