Kehren Sie eine verknüpfte Liste in go um

WBOY
Freigeben: 2024-07-18 08:33:29
Original
1077 Leute haben es durchsucht

Reverse a linked list in go

Dies ist eine Lieblingsfrage für neue Entwickler. Ziemlich einfach, wenn Sie einen anständigen Datenstrukturkurs hatten.

Eine einzelne verknüpfte Liste umkehren. (Dies ist Leetcode 206)

Für die Implementierung habe ich mich dafür entschieden, die verknüpfte Liste zu einem generischen Typ zu machen.

type Node[T any] struct {
    Data T
    Next *Node[T]
}

type LinkedList[T any] struct {
    Head *Node[T]
}

func (ll *LinkedList[T]) Append(data T) {
    newNode := &Node[T]{Data: data, Next: nil}

    if ll.Head == nil {
        ll.Head = newNode
        return
    }

    current := ll.Head
    for current.Next != nil {
        current = current.Next
    }
    current.Next = newNode
}
Nach dem Login kopieren

Und für die umgekehrte Funktion wird dies in einem einzigen Durchgang erledigt, indem wir erkennen, dass alles, was wir tun müssen, ist, einen Zeiger auf den vorherigen Knoten beizubehalten und dann den „nächsten“ Knoten eines bestimmten Knotens auf den vorherigen zu setzen.

Wenn wir das Ende erreichen, wissen wir, dass der aktuelle Knoten der neue „Kopf“ der Liste ist.

func (ll *LinkedList[T]) ReverseLinkedList() {
    var prev *Node[T] = nil
    var ptr *Node[T] = ll.Head
    for ptr != nil {
        var next *Node[T] = ptr.Next
        ptr.Next = prev
        prev = ptr
        if next == nil {
            ll.Head = ptr
        }
        ptr = next
    }
}
Nach dem Login kopieren

Haben wir eine Randbedingung übersehen? Welche Komplikationen kommen hinzu, wenn die Liste nun eine doppelt verknüpfte Liste ist? Lass es mich in den Kommentaren wissen.

Danke!

Den Code für diesen Beitrag und alle Beiträge dieser Reihe finden Sie hier

Das obige ist der detaillierte Inhalt vonKehren Sie eine verknüpfte Liste in go um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!