Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PH_Nikit

[Resolvido] Lista simplesmente Encadeada

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.