Em meados de 2017, publiquei um artigo sobre lista encadeada, ou Linked List para os mais íntimos, esse artigo é uma atualização/refatoração. Esse é um tópico abordado em cursos e graduações e realmente ajuda a imaginar como seria a vida de um desenvolvedor se as listas não fossem implementadas no core de uma linguagem de alto nível.

Linked List
É uma coleção linear de itens de dados que não recebem uma ordem linear para sua alocação física na memória.
Definições
Singly Linked List é implementação, onde cada elemento possui um vínculo para o próximo elemento. Desta forma, é possível percorrer os elementos de forma unidirecional, ou seja, em uma única direção.
Double Linked List é uma variação do Linked List onde cada elemento tem um vínculo anterior e seguinte, portanto, é bidirecional.
Conceito
Linked List serve como base para implementar outras estruturas de dados, como Lista, Dicionário, Fila e Pilha.
Uma vantagem de uma Linked List é que cada elemento ocupa um espaço de memória, de modo que os elementos podem ser adicionados ou removidos sem a necessidade de mover ou realocar o disco.
Teste de algoritmo
Nos dois cenários propostos, os itens 1 e 5 são excluídos em uma lista de itens contendo valores iniciais [1, 3, 5, 7, 11].
Singly Linked List
Formato: Atual → Próximo

Quando inserimos um item na lista, o nó adicionado é vinculado como próximo no nó item anterior, sendo assim podemos percorrer do inicio ao fim, porém sem a possibilidade de retorno.
As propriedades head e tail definem o início e o fim da lista, para que seja possível percorrer do início ou ir direto ao fim da lista.
Resultado:
Doubly Linked List
Formato: Anterior <- Atual -> Próximo

Seguindo o mesmo conceito do Singly Linked List, ao inserir na lista, também é feito um vinculo entre o nó atual e adicionalmente ao nó anterior, a propriedade next do nó anterior é vinculada ao nó atual e a propriedade prev do nó atual é vinculada ao nó anterior.
Resultado:
Variação
Circular Linked List

É uma variação da Doubly Linked List, onde há uma referência dos cursores head/tail para o primeiro e ao último elemento, criando um loop para que a iteração nunca pare.

Prós
- A estrutura de dados é dinâmica e cresce alocando e liberando memória em tempo de execução sem definir um tamanho inicial;
- Operações de inserção, exclusão e manipulação são fáceis de executar em qualquer local da lista;
- Facilita a implementação de pilhas e filas;
- É possível inverter uma lista bidirecional;
Contras
- Devido à forma como os ponteiros são armazenados, eles consomem mais memória do que os arrays;
- Os nós são sempre acessados na ordem de criação, portanto devem ser lidos desde o início;
- Os nós são armazenados de forma inconsistente em locais diferentes de memória, aumentando significativamente o tempo de acesso a itens individuais;
Finalizando
Como você pode ver, Linked List aplica-se a uma variedade de estruturas de tipo de dados usadas com certa frequência. A vinculação entre os nós só é possível porque as referências são armazenadas, não os valores. Ao contrário do que é encontrado em algumas linguagens e frameworks, Linked List não é...

Até a próxima, mantenha seu 🧠 kernel atualizado. Deus abençoe 🕊️.