"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Inverser une liste chaînée en un clin d'œil

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

Publié le 2024-07-31
Parcourir:416

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 une classe de structures de données décente.

Inversez une seule liste chaînée. (Il s'agit du 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
}

Et pour la fonction inverse, cela se fait en un seul passage en reconnaissant que tout ce que nous devons 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 le nouveau « 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
    }
}

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

Merci!

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

Déclaration de sortie Cet article est reproduit sur : https://dev.to/johnscode/reverse-a-linked-list-in-go-583i?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3