Religue listas ligadas
Inverta, mescle e detecte ciclos movendo os ponteiros dos nós com cuidado.
- Inverter uma lista ligada de forma iterativa.
- Usar ponteiros rápido e lento para encontrar o meio ou detectar um ciclo.
- Simplificar casos extremos com um nó cabeça fictício (dummy head).
Uma lista ligada é uma cadeia de nós, e cada um guarda um valor e uma referência para o próximo nó. Inserir ou remover um nó que você já tem em mãos é O(1), mas chegar ao k-ésimo nó leva O(k). As perguntas de lista ligada testam se você consegue manipular referências sem perder parte da lista - então desenhe as caixas e as setas enquanto avança.
Técnicas principais
- Inversão iterativa: percorra a lista com
prev,currente umnextguardado, apontando cada nó de volta paraprev. - Ponteiros rápido e lento: mova um ponteiro dois passos e o outro um passo. Quando o rápido chega ao fim, o lento está no meio. Se o rápido encontrar o lento em algum momento, a lista tem um ciclo (algoritmo de Floyd).
- Dummy head: comece a lista de resultado com um nó marcador, para que inserir no começo não precise de caso especial; devolva
dummy.next.
1class Node:
2 def __init__(self, value, next=None):
3 self.value = value
4 self.next = next
5
6def reverse(head):
7 prev = None
8 current = head
9 while current:
10 next_node = current.next # save before rewiring
11 current.next = prev
12 prev = current
13 current = next_node
14 return prev
15
16head = Node(1, Node(2, Node(3)))
17node = reverse(head)
18while node:
19 print(node.value, end=" ")
20 node = node.next
21print()3 2 1
A ordem das quatro atribuições dentro do laço importa: guarde current.next primeiro, ou o resto da lista se perde no instante em que você religa current. A inversão é O(n) de tempo e O(1) de espaço extra. Uma versão recursiva é mais curta, mas usa O(n) de espaço na pilha.
Principais conclusões
Guarde o
nextantes de religar um nó.Ponteiros rápido/lento encontram o meio e detectam ciclos com espaço O(1).
Um dummy head remove casos especiais ao construir listas.
Quiz da aula
5 perguntas · aprovação com 4 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Pratique: resolva problemas de entrevistas técnicas
Resolva um problema clássico de entrevista em Python e execute-o com casos de teste. Busque a complexidade ideal e depois confira os casos extremos. Os exercícios rodam localmente no navegador.
Inverta uma lista ligada
O código inicial monta uma lista ligada a partir de uma linha de valores. Inverta-a religando os nós (não invertendo a lista do Python) e depois imprima os valores a partir da nova cabeça, separados por espaços.
- Cinco nós
- Um nó só
O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…