Maison > développement back-end > Golang > le corps du texte

Inverser une liste chaînée en un clin d'œil

WBOY
Libérer: 2024-07-18 08:33:29
original
1077 Les gens l'ont consulté

Reverse a linked list in go

C'est une question préférée à poser aux nouveaux développeurs. Assez simple si vous avez eu un cours décent sur les structures de données.

Inversez une seule liste chaînée. (Voici le Leetcode 206)

Pour l'implémentation, j'ai choisi de faire de la liste chaînée un type générique.

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

Et pour la fonction inverse, cela se fait en un seul passage en reconnaissant que tout ce que nous avons à faire est de maintenir un pointeur vers le nœud précédent, puis de définir le « suivant » d'un nœud donné sur le précédent.

Lorsque nous atteignons la fin, nous savons que le nœud actuel est la nouvelle « tête » de la liste.

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

Avons-nous manqué une condition aux limites ? Quelles complications s’ajoutent si la liste est désormais une liste doublement chaînée ? Faites-le-moi savoir dans les commentaires.

Merci !

Le code de cet article et de tous les articles de cette série peut être trouvé ici

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:dev.to
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!