Heim > Backend-Entwicklung > Golang > Lassen Sie uns darüber sprechen, wie Golang Rekursion verwendet, um verknüpfte Listen umzukehren

Lassen Sie uns darüber sprechen, wie Golang Rekursion verwendet, um verknüpfte Listen umzukehren

PHPz
Freigeben: 2023-03-29 15:50:17
Original
1261 Leute haben es durchsucht

In Golang kann die Umkehrung einer verknüpften Liste mithilfe von Rekursion implementiert werden. In der rekursiven Funktion müssen wir zunächst den Knoten neben dem aktuellen Knoten als Parameter an die rekursive Funktion übergeben und dann den aktuellen Knoten auf den Knoten neben dem nächsten Knoten zeigen lassen. Schließlich wird der Rückgabewert der rekursiven Funktion zurückgegeben, der der neue Kopfknoten ist.

Das Folgende ist der Golang-Code, der Rekursion verwendet, um die verknüpfte Liste umzukehren:

type ListNode struct {
    Val int
    Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    newHead := reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil
    return newHead
}
Nach dem Login kopieren

Wir bestimmen zuerst, ob der Kopfknoten oder der nächste Knoten des Kopfknotens Null ist, und geben dann den Kopf direkt zurück. Andernfalls rufen wir die rekursive Funktion auf und übergeben den nächsten Knoten von head. Als nächstes lassen wir den nächsten Knoten von head auf head zeigen und setzen dann den nächsten Knoten von head auf Null. Abschließend wird der neue Kopfknoten newHead zurückgegeben.

Wir können den folgenden Testcode verwenden, um zu überprüfen, ob unsere Funktion korrekt ist:

// 测试代码
func main() {
    node1 := ListNode{Val: 1}
    node2 := ListNode{Val: 2}
    node3 := ListNode{Val: 3}
    node4 := ListNode{Val: 4}
    node5 := ListNode{Val: 5}
    
    node1.Next = &node2
    node2.Next = &node3
    node3.Next = &node4
    node4.Next = &node5
    
    fmt.Println("原链表:")
    printList(&node1)
    newHead := reverseList(&node1)
    fmt.Println("反转后的链表:")
    printList(newHead)
}
func printList(head *ListNode) {
    for p := head; p != nil; p = p.Next {
        fmt.Printf("%d ",p.Val)
    }
    fmt.Println()
}
Nach dem Login kopieren

Die laufenden Ergebnisse sind wie folgt:

原链表:
1 2 3 4 5 
反转后的链表:
5 4 3 2 1
Nach dem Login kopieren

Wie aus den laufenden Ergebnissen ersichtlich ist, hat unsere umgekehrt verknüpfte Listenfunktion reverseList das Original erfolgreich umgekehrt verknüpfte Liste.

Zusammenfassung:

In diesem Artikel wird der Golang-Code zum Umkehren der verknüpften Liste durch rekursive Funktionen vorgestellt. Der Code zum Umkehren der verknüpften Liste durch eine rekursive Funktion ist prägnant, leicht zu verstehen und leicht zu verstehen. In tatsächlichen Projekten können wir je nach Bedarf verschiedene Methoden zur Implementierung der umgekehrt verknüpften Liste auswählen.

Das obige ist der detaillierte Inhalt vonLassen Sie uns darüber sprechen, wie Golang Rekursion verwendet, um verknüpfte Listen umzukehren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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