gRoOvE 0 Denunciar post Postado Março 27, 2009 Então quando for excluir, devo sempre percorrer a lista pra encontrar os repetidos e ai sim, passar apenas o endereço pra função que vai de fato excluir? Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Março 27, 2009 Sim.... Quer dizer, é a maneira "mais correta", dessa forma não haverá problemas de excluir o nó errado, entendeu? você tbm pode fazer uma "trava" de valores duplicados na hora de inserir, conforme você anda até o final da lista, ja vai comparando valores, se ja existir, retorna algum erro. =D [] Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Março 28, 2009 Saquei, fiz assim ve se é isso mesmo...uma coisa que achei meio confusa é ter q criar outra função pra buscar o endereço do nó, tá certo isso mesmo? E essa de travar valores iguais, depende da situação também... Função que vai excluir de fato void excluirLista(Celula* inicio, Celula* del) { Celula* p = inicio; while(p != NULL) { if(p->proximo == del) { p->proximo = del->proximo; free(del); return; } p = p->proximo; } } Função que vai buscar pelo valor e retornar o endereço do nó caso o mesmo seja encontrado Celula* verificaValorExcluir(int valor) { Celula *aux = lista; while(aux != NULL) { if(aux->conteudo == valor) return(aux); aux = aux->proximo; } return(NULL); } Rodando... case 3: system("cls"); printf("Digite o valor: "); scanf("%d%*c",&valor); if(aux = verificaValorExcluir(valor)) excluirLista(lista,aux); break; Compartilhar este post Link para o post Compartilhar em outros sites