Ir para conteúdo
Nathalia Lucca

Lista Encadeada ERRO Inserção do Final da Lista

Recommended Posts

Ola Gente,

 

Quando eu tento inserir um nó no fim da lista ele aparentemente seleciona o ultimo valor e o aponta para o novo. Mas quando eu imprimo a lista o valor não aparece. A inserção no inicio funciona normal. Desde já agradeço a atenção!

 

typedef struct lista{
            int info;
           struct lista* prox;
}Lista;

int insere_ini(Lista* p, int val){
            Lista* novo = (Lista*)malloc(sizeof(Lista));
            novo->info = val;
            novo->prox = p;
      return novo;
}
int insere_fim(Lista* p, int valor){
            Lista* novo = (Lista*)malloc(sizeof(Lista));
               Lista* aux = p;
               Lista* ant = NULL;

        while(aux->prox != NULL){
             ant = aux;
             aux = aux->prox;
        }
                     printf("\nULTIMO ELEMENTO %d", ant->info);
          novo->info = valor;
         ant->prox = novo;
         novo->prox = NULL;
                     //printf("\nANTERIOR %d", ant->info);
                     //printf("\nNOVO %d", novo->info);
  
    return p;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Note que você está retornando um inteiro na definição da função, mas o return tem um Lista *.

Tente isso:

 

#include <stdio.h>
#include <stdlib.h>
typedef struct lista{
            int info;
           struct lista* prox;
}Lista;

Lista * insere_inicio(Lista * p, int val){
      Lista * no_inicial = (Lista*)malloc(sizeof(Lista));
      no_inicial->info = val;
      no_inicial->prox = p;
      return no_inicial;
}

Lista * insere_fim(Lista* p, int valor){
      if (p->prox == NULL) {
        p->info = valor;

      } else {
        Lista * tmp = NULL;
        for(tmp=p; tmp->prox != NULL; tmp=tmp->prox);
        Lista * novo = (Lista*)malloc(sizeof(Lista));
        novo->info = valor;
        novo->prox = NULL;
        tmp->prox = novo;
      }
      return p;
}

int main() {
  Lista * pl = (Lista *) malloc(sizeof(Lista));
  if (pl != NULL) {
    pl = insere_inicio(pl, 7);
    pl = insere_fim(pl, -128);
    
    Lista * tmp = NULL;
    for(tmp = pl ; tmp != NULL; tmp = tmp->prox) {
      printf("%d\n", tmp->info);
    }
  }
  free(pl);
  return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

×

Informação importante

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