Pular para o conteúdo principal

Questão de Algoritmos e Estrutura de Dados — Estrutura de Dados — CONSULPAM 2026

Algoritmos e Estrutura de DadosEstrutura de Dados
Código
qg660559
Banca
CONSULPAM
Órgão
GHC-RS
Ano
2026
Nível
Médio
Cargo
Programador
Em uma lista simplesmente encadeada não ordenada, um programador recebe referência direta para um nó “p” e precisa remover o elemento imediatamente posterior a esse nó, preservando a consistência dos encadeamentos. O nó “p” não é o último da estrutura de dados manipulada. Diante do exposto, para realizar a operação desejada o programador deve:
  1. ACopiar o conteúdo de “p.prox” para “p” e liberar o nó “p”, mantendo o restante da lista inalterado.
  2. BAtribuir “p = p.prox.prox”, pois a atualização da variável local elimina o nó intermediário da lista.
  3. CAtualizar o campo de encadeamento de “p” para referenciar o sucessor do nó atualmente apontado por “p.prox”.
  4. DInverter temporariamente os ponteiros da lista até alcançar o final e, só então, desfazer a inversão sem o nó removido.
  5. EReiniciar a travessia a partir da cabeça da lista para localizar o predecessor do nó “p” e, em seguida, removê-lo da estrutura.
Revelar gabarito e comentário

GabaritoC — Atualizar o campo de encadeamento de “p” para referenciar o sucessor do nó atualmente apontado por “p.prox”.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Remoção em lista simplesmente encadeada

Gabarito: letra C. Para remover o nó imediatamente posterior a um nó p em uma lista simplesmente encadeada, basta fazer o campo prox de p apontar para o sucessor do nó a ser removido, ou seja, p.prox = p.prox.prox. Essa operação preserva os encadeamentos e é a descrita na alternativa C.

A questão testa o conhecimento da manipulação de ponteiros em estruturas ligadas. O programador já possui a referência direta ao nó p, que é o predecessor do nó a ser removido. Não é necessário percorrer a lista novamente.

  1. 1p.prox = p.prox.prox
  2. 2Liberar nó removido (free)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Copiar o conteúdo de p.prox para p e liberar p removeria o próprio nó p, não o posterior. Além disso, o nó p perderia seu conteúdo original, comprometendo a lista.

Alternativa B — ❌ Incorreta

Atribuir p = p.prox.prox apenas altera a variável local p, sem modificar os encadeamentos da lista. O nó intermediário continua existindo e ainda é referenciado pelo campo prox do nó original.

Alternativa C — ✅ Correta ⟵ GABARITO

A operação correta: atualizar o campo de encadeamento de p para referenciar o sucessor do nó apontado por p.prox, ou seja, p.prox = p.prox.prox. Isso remove o nó posterior, e o nó removido pode então ser liberado (free) para evitar vazamento de memória.

Alternativa D — ❌ Incorreta

Inverter temporariamente os ponteiros até o final da lista é desnecessário e ineficiente. A remoção do nó posterior a p é uma operação de custo O(1) que não exige travessia.

Alternativa E — ❌ Incorreta

Reiniciar a travessia a partir da cabeça para localizar o predecessor de p é redundante, pois p já é o predecessor do nó a ser removido. Isso adicionaria complexidade desnecessária.

NÃO CAIA NESSA!

Em listas simplesmente encadeadas, para remover o nó seguinte a um nó conhecido p, basta redirecionar p.prox para p.prox.prox. É uma operação O(1). Não confunda com remoção do próprio nó p (que exigiria acesso ao predecessor de p). Memorize o padrão: p.prox = p.prox.prox.

Link permanente: /questoes/qg660559