Módulo 4 - Listas ligadas: a corrente de nós

Listas duplas e circulares: variações da corrente

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026

O que você vai aprender

  • Entender a lista duplamente ligada (ligação para o anterior e o próximo).
  • Entender a lista circular (o último aponta para o primeiro).
  • Reconhecer usos reais de cada variação.
  • Perceber o custo extra de cada ligação adicional.

Andar nos dois sentidos

A lista ligada simples tem uma limitação incômoda: ela é uma via de mão única. Cada nó só sabe quem vem depois, nunca quem vem antes. Se você está no meio da corrente e precisa voltar um nó, azar: tem que recomeçar da cabeça. A lista duplamente ligada resolve isso dando a cada nó duas ligações, uma apontando para o próximo e outra para o anterior. Agora a corrente é uma via de mão dupla: de qualquer nó você anda para frente ou para trás. Isso torna barato remover um nó tendo apenas ele em mãos, porque a ligação para o anterior está ali, sem precisar procurar quem apontava para você.

Dois desenhos. Em cima, uma lista duplamente ligada: três nós com valores, cada par unido por duas setas, uma apontando para frente (próximo) e outra para trás (anterior). Embaixo, uma lista circular: quatro nós dispostos em anel, cada um com uma seta para o próximo, e a seta do último nó voltando para o primeiro, fechando o círculo sem apontar para o nada.
Em cima, a dupla ligação (frente e trás). Embaixo, a circular: o último volta ao primeiro, formando um anel.

A corrente que não termina

A lista circular ataca outra limitação: o fim. Numa lista comum, o último nó aponta para o nada, e chega. Na circular, o último nó aponta de volta para o primeiro, e a corrente vira um anel sem começo nem fim claros. Isso serve quando o dado é naturalmente cíclico. Pense num carrossel de jogadores que reveza a vez: depois do último, volta ao primeiro, para sempre. Ou numa playlist em modo repetir, que ao acabar recomeça. O detalhe delicado é percorrer uma lista circular: como não há o nada para servir de parada, um laço ingênuo roda para sempre. Você precisa de outra condição, por exemplo parar quando voltar ao nó de onde começou.

// percorrer uma lista circular sem laco infinito
inicio <- cabeca
atual <- cabeca
repita
  escreva(atual.valor)
  atual <- atual.proximo
ate atual == inicio   // parou ao voltar ao ponto de partida
// sem essa condicao, o anel giraria para sempre

Na circular não há o nada para parar. A condição de parada é voltar ao nó inicial.

🎮 Jogo da aula

Uma volta no anel

Esta lista circular tem três nós. O programa dá uma volta completa. Escolha a saída que ele imprime.

// lista circular: A -> B -> C -> (volta para A)
inicio <- A
atual <- A
repita
  escreva(atual.valor)
  atual <- atual.proximo
ate atual == inicio

Cada variação no seu lugar

Nenhuma variação é gratuita, e por isso a simples ainda é o ponto de partida. Cada ligação a mais é memória a mais em todo nó e mais uma coisa para manter certa: numa lista duplamente ligada, ao inserir ou remover, você precisa ajustar as duas ligações dos vizinhos, não só uma, e esquecer metade gera bug. A circular pede sempre atenção à condição de parada. A regra prática é usar a variação mais simples que resolve o problema. Se você nunca anda para trás, a lista simples basta. Se precisa de navegação nos dois sentidos, como o histórico de avançar e voltar, a dupla compensa. Se o dado gira em ciclo, a circular é natural. A estrutura acompanha a forma do problema, nunca o contrário.

Teste rápido

O que uma lista duplamente ligada tem que a lista ligada simples não tem?

Perguntas frequentes

Qual a vantagem principal da lista duplamente ligada?
Poder andar nos dois sentidos. Com a ligação para o anterior em cada nó, você percorre a corrente para frente ou para trás e remove um nó tendo só ele em mãos, sem procurar quem apontava para ele. É o que sustenta recursos como avançar e voltar em navegação.
Por que percorrer uma lista circular pode travar o programa?
Porque ela não tem o nó final que aponta para o nada. Um laço que esperava esse fim nunca o encontra e gira para sempre. A solução é usar outra condição de parada, como interromper quando voltar ao nó em que começou.
Onde a lista circular é usada de verdade?
Em qualquer situação cíclica: rodízio de jogadores ou processos que revezam a vez, playlists em modo repetir, buffers que reaproveitam o espaço em círculo. Sempre que, ao chegar ao fim, faz sentido recomeçar do começo, a estrutura circular modela isso com naturalidade.
A dupla ligação deixa a lista mais pesada?
Um pouco. Cada nó guarda uma referência a mais (a do anterior), o que consome mais memória e adiciona uma ligação para manter certa em cada inserção e remoção. Você troca esse custo pela capacidade de navegar nos dois sentidos, e só compensa quando essa navegação é necessária.
Existe lista duplamente ligada e circular ao mesmo tempo?
Existe: a duplamente ligada circular. Cada nó aponta para o anterior e o próximo, e as pontas se fecham (o último liga ao primeiro e o primeiro ao último). É a mais poderosa e a mais trabalhosa de manter, usada quando se precisa girar em anel e andar nos dois sentidos.
Por qual variação devo começar num problema novo?
Pela mais simples que resolve. Comece supondo a lista simples; só suba para a dupla se precisar andar para trás, e para a circular se o dado for cíclico. Adicionar ligação sem necessidade é complexidade e risco de bug sem ganho, contra a regra de usar o mínimo que atende.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.