• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Blog dos Moderadores

  • artigos
    43
  • comentários
    0
  • visualizações
    49432

Autores deste blog

  • jpaulino 19
  • thoga31 9
  • Rui Carlos 7
  • David Pintassilgo 3
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

Como remover nós de uma lista ligada

brunoais

749 visualizações

Aqui está explicado pelo nosso membro Flinger, em pseudo-código, dois processos para remover um nó de uma lista ligada.

Tens 2 modelos:

O recursivo, que pode custar mais a entender para quem está habituado a programação imperativa, mas que pode ser mais fácil e simples de programar e de ler, se entenderes bem o que estás a fazer.

Ou o imperativo, um bocado mais complexo, mas mais fácil de entender para quem não entende bem a recursividade.

Recursivo:

lista remove_lista(lista)
se lista = null
retorna null
senão se (lista é o nodo a remover)
retorna o lista->proximo
senao
lista->proximo = remove_lista(lista->proximo)
retorna lista;

A função devolve-te a nova lista já sem o elemento (faltam aí os frees, lógico).

No caso imperativo, tens sempre de ter em atenção as extremidades.

Se o primeiro nodo é o nodo a remover, a tua lista passa a ser o nodo seguinte.
Senão olhas sempre para o seguinte, enquanto houver.
listatemp=lista;
enquanto (listatemp->proximo != null && listatemp->proximo não for o nodo a remover)
 listatemp=listatemp->proximo
Se listatemp->proximo = null
 não encontrou o nodo
senao listatemp->proximo = listatemp->proximo->proximo (usar variavel temporaria para fazer o free ao nodo removido)

Podem existir solução mais elegantes, mas isto é o que eu costumo fazer. Testa sempre as remoções nas extremidades que costumam ser os casos mais complicados.

Source: Problemas em remover nomes em lista ligada


0


0 Comentários


Não há comentários para mostra.

Convidado
Está a comentar como guest. Se tem uma conta, por favor inicie sessão.
Adicionar um comentário...

×   Colou conteúdo com formatação.   Restaurar formatação

×   Your link has been automatically embedded.   Mostrar como ligação