Jump to content

Blog dos Moderadores

  • entries
    36
  • comments
    0
  • views
    57,782

Contributors to this blog

  • jpaulino 17
  • Rui Carlos 7
  • thoga31 7
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

Como remover nós de uma lista ligada


brunoais

1,821 views

 Share

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

 Share

0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.