"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Reverter uma lista vinculada em go

Reverter uma lista vinculada em go

Publicado em 31/07/2024
Navegar:349

Reverse a linked list in go

Esta é uma pergunta favorita para novos desenvolvedores. Muito simples se você tiver uma classe de estruturas de dados decente.

Inverter uma única lista vinculada. (Este é o Leetcode 206)

Para a implementação, optei por tornar a lista vinculada um tipo genérico.

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
}

E para a função reversa, isso é feito com uma única passagem, reconhecendo que tudo o que precisamos fazer é manter um ponteiro para o nó anterior e, em seguida, definir o 'próximo' de um determinado nó para o anterior.

Quando chegarmos ao final, saberemos que o nó atual é o novo 'cabeçalho' da lista.

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
    }
}

Perdemos uma condição de limite? Que complicações serão adicionadas se a lista for agora uma lista duplamente vinculada? Deixe-me saber nos comentários.

Obrigado!

O código desta postagem e de todas as postagens desta série podem ser encontrados aqui

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/johnscode/reverse-a-linked-list-in-go-583i?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3