Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PlayMa256

Listas Ligadas simples

Mensagens Recomendadas

PlayMa256

Bom, estou realizando alguns exercicios de listas ligadas, e tenho que fazer algumas funçoes.

Realizei a funcao de apagar o ultimo elemento da lista, mas aparentemente nao apaga.

int Remover_fim_LS(Tno_ls **inicio){
   Tno_ls *percorre;
   Tno_ls *auxiliar;
   percorre = *inicio;

   if(*inicio == NULL){
    printf("\nLISTA VAZIA ! \nRemocao do FIM Impossivel\n");
    return 1;
   }else{
    //percorre a lista
    while(percorre->prox != NULL){
		    if(percorre->prox != NULL){
			    auxiliar = percorre;
			    percorre = percorre->prox;

		    }else{
			    percorre->prox = NULL;
			    free(percorre);
			    return 0;
		    }
    }
  }
}

ao chamar a funcao passo o &ini, dessa maneira

erro = Remover_fim_LS(&ini);

Alguem poderia me ajudar quanto a isso? nao consigo identficar o erro.

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

exientem vários erros, mas vamos ver o primeiro :

- quais as instruções que são executadas quando a lista só tem um elemento ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PlayMa256

bom, ele simplesmente para o programa, pq sendo um elemento só, ao apagar o fim, ele irá apagar o único elemento, então não faz sentido.

Estava tentando realizar mais alguns testes, e acabei chegando em um resultado, mas mesmo assim não me entra na cabeça o porque dessa linha:

while(percorre != NULL){...

Verificando dessa maneira, ele não iria virar um loop infinito (pensando é claro, que há elementos dentro da lista)?

bom, eis o codigo que funciona:

int Remover_fim_LS(Tno_ls **inicio){
   Tno_ls *percorre;
   Tno_ls *auxiliar ;
   //auxiliar = *inicio;
   percorre = *inicio;
   //percorre a lista

   if(*inicio == NULL){
    printf("\nLista vazia\nRemocao de fim impossivel");
    return 1;
   }else{
    while(percorre != NULL){
	    if(percorre->prox != NULL){
		    auxiliar = percorre;
		    percorre = percorre->prox;
	    }else{
		    auxiliar->prox = NULL;
		    free(percorre);
		    return 0;
	    }
    }
   }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

funciona mais ou menos ... responde :

- o que acontece se a lista só tiver um elemento ?

- qual e para que serve o valor de retorno da função ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PlayMa256

funciona mais ou menos ... responde :

- o que acontece se a lista só tiver um elemento ?

- qual e para que serve o valor de retorno da função ?

1º: nao havia pensado nessa excessao, nem realizado algo com ela...

2º: serve para reconhecimento de erros, 1 = erro , 0=sucesso, os quais sao tratados no começo do codigo, que nao está aqui, mas é tratado.

Editado por PlayMa256

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.