Maison > développement back-end > Golang > Parlons de la façon dont Golang utilise la récursivité pour inverser les listes chaînées

Parlons de la façon dont Golang utilise la récursivité pour inverser les listes chaînées

PHPz
Libérer: 2023-03-29 15:50:17
original
1262 Les gens l'ont consulté

En Golang, l'inversion d'une liste chaînée peut être implémentée en utilisant la récursivité. Dans la fonction récursive, nous devons d'abord transmettre le nœud à côté du nœud actuel dans la fonction récursive en tant que paramètre, puis laisser le nœud actuel pointer vers le nœud à côté du nœud suivant. Enfin, la valeur de retour de la fonction récursive est renvoyée, qui est le nouveau nœud principal.

Ce qui suit est le code golang qui utilise la récursion pour inverser la liste chaînée :

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
}
Copier après la connexion

Nous déterminons d'abord si le nœud principal ou le nœud suivant du nœud principal est nul, puis renvoyons head directement. Sinon, on appelle la fonction récursive, en passant au nœud suivant de la tête. Ensuite, nous laissons le nœud suivant de head pointer vers head, puis définissons le nœud suivant de head sur nil. Enfin, le nouveau nœud principal newHead est renvoyé.

Nous pouvons utiliser le code de test suivant pour vérifier si notre fonction est correcte :

// 测试代码
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()
}
Copier après la connexion

Les résultats d'exécution sont les suivants :

原链表:
1 2 3 4 5 
反转后的链表:
5 4 3 2 1
Copier après la connexion

Comme le montrent les résultats d'exécution, notre fonction de liste chaînée inversée reverseList a réussi à inverser l'original liste chaînée.

Résumé :

Cet article présente le code Golang permettant d'inverser la liste chaînée via des fonctions récursives. Le code pour inverser la liste chaînée via une fonction récursive est concis, facile à comprendre et facile à comprendre. Dans les projets réels, nous pouvons choisir différentes méthodes pour implémenter la liste chaînée inversée en fonction de nos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal