Você está na página 1de 1

Pessoal,

(leiam o anexo com calma)

Na aula passada passei a solução do problema de criar uma função que


excluísse um elemento da lista duplamente encadeada. Porém, a solução
estava incompleta pois os ponteiros first e last da função main não
eram atualizados dentro da função exclui. Assim, se vocês rodarem o
programa e excluírem o primeiro elemento (aquele que first aponta)
quando a função listar a lista vai aparecer um 0 como primeiro
elemento. Por quê? Porque a região da memória que first apontava foi
liberada (chamada da função free pela função exclui). Apesar de,
dentro da função exclui, o parâmetro h (que recebe o valor de first)
ser atualizado essa atualização não passa para o ponteiro first.
Para entender como o problema foi resolvido leiam o pdf anexo (deve
ter uns erros de português já que escrevi rápido e não revisei, as
correções serão bem vindas.).

Segue em anexo também, a resolução do problema. Fiz duas funções


exclui uma sem gambiarra mas mais complicada pois foi necessário
utilizar o recurso (*h)->next, pois como h é um ponteiro para
ponteiro, é necessário primeiro transformá-lo no endereço original
(daí o uso de parênteses) para depois acessar um campo da estrutura. A
segunda versão, foi criada dois ponteiros auxiliares que recebem o
endereço dos parâmetros.

Você também pode gostar