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

Supprimer le Nième de la fin de la liste chaînée

WBOY
Libérer: 2024-07-17 01:15:30
original
362 Les gens l'ont consulté

Remove Nth from end of linked list

Dans cet article, j'explore un autre algorithme de liste chaînée. Celui-ci est un peu plus difficile.

Créez une fonction pour supprimer le nième nœud de la fin d'une liste chaînée.

Cela vient d'un problème de leetcode. Comme dans le problème du leetcode, 'n' est basé sur un et peut aller de 1 à la longueur de la liste.

func (ll *LinkedList[T]) RemoveNthFromEnd(n int) *Node[T] {
    if n == 0 {
        return nil
    }
    fast := ll.Head // this moves to the end
    slow := ll.Head // this should be one behind the nth from end

    for count := 0; count < n; count++ {
        if fast == nil { // list is too short
            return nil
        }
        fast = fast.Next
    }
    if fast == nil { // special case, removing head
        res := ll.Head
        ll.Head = ll.Head.Next
        return res
    }
    for fast != nil && fast.Next != nil {
        slow = slow.Next
        fast = fast.Next
    }
    res := slow.Next
    slow.Next = slow.Next.Next
    return res
}
Copier après la connexion

La clé pour cela est d'utiliser des pointeurs doubles. Nous commençons par initialiser un pointeur rapide et un pointeur lent vers la tête de liste.

Ensuite, nous avançons le pointeur rapide n nœuds. De cette façon, le pointeur lent se trouve désormais « n » derrière le pointeur rapide. Maintenant, nous pouvons déplacer les deux pointeurs en pas de verrouillage jusqu'à ce que fast soit à la fin.

Nous pouvons ensuite supprimer le nième avant-dernier nœud et le renvoyer.

Y a-t-il une meilleure façon ? 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!