paulo1205
(usa Ubuntu)
Enviado em 21/06/2017 - 14:31h
Há algumas coisas estranhas no programa que você postou. Entre elas, destaco as seguintes:
1) O ponteiro
fim não está sendo usado em qualquer lugar do programa. Se você o utilizasse, a inserção no fim da lista se tornaria uma operação mais barata (O(1), em vez de O(n)).
2) Na função
insere(), você deixa
p->ant com valor indefinido se o nó for o primeiro da lista. Acho que seria bom usar
nullptr.
3) Aliás, use sempre
nullptr em C++.
NULL tem comportamentos diferentes em C e em C++. Veja
https://www.vivaolinux.com.br/topico/C-C++/C-qual-usar-NULL-ou-0-ou-nullptr.
4) O último bloco
else na função
excluir() está ligado ao
if errado.
5) Aliás, aquele “
if(achei)”, ao qual o
else acima referido está erroneamente ligado, poderia ser apenas um
else do “
if(!achei)” que está logo acima.
6) Ainda em
excluir(), parece-me que você não está tratando o nó que tem o nós a ser excluído como antecessor. Sendo a lista duplamente encadeada, isso deveria ocorrer.
7) Em
percorre(), não entendi por que motivo você presumiu que o
menor é
inicio->prox. Por que
inicio não conta?
8) Aliás, esse valor inicial de
menor vai causar problemas se a lista estiver vazia, porque você não poderia tentar usar
inicio->prox quando o próprio
inicio for nulo.
9) Na mesma função, você faz um teste para ver se a lista está vazia, mas não evita a execução do código que só poderia ser executado se a lista não o estivesse. Ou você coloca esse código num bloco
else, ou muda a ordem dos testes e a organização da função.
10) Qual o sentido de testar “
aux < menor”, sendo
aux e
menor ponteiros? Será que você não quis dizer “
aux->info < menor->info”?