Ir para conteúdo

POWERED BY:

Arquivado

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

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.