Fala pessoal, tranquilo? Eu to estudando sobre a criação de listas simplesmente encadeadas com um nó cabeça, então decidi fazer um programa simples pra testar os conceitos. O problema é que depois de registrar a informação nos 'n' nós, quando eu coloco para exibir a lista só o ultimo nó aparece. Alguém poderia me ajudar? Agradeço desde já! (Qualquer crítica construtiva em relação ao código como identação, clareza, etc.. é muito bem vinda!)
#include <stdio.h>
#include <stdlib.h>
typedef struct dados
{
int idade;
struct dados *prox;
}Dados;
void exibe_lista(Dados *lista);
void inicia_lista(Dados *lista);
void insere_final(Dados *lista, int value);
int main()
{
int val_idade;
int op;
Dados *head = (Dados *)malloc(sizeof(Dados));
if(!head)
exit(1);
inicia_lista(head);
do
{
printf("Entre a opcao 1 para inserir.\n");
printf("Entre a opcao 2 para exibir.\n");
scanf("%d", &op);
printf("\n");
switch(op)
{
case 1:
printf("Entre o valor da idade: ");
scanf("%d", &val_idade);
printf("\n");
insere_final(head, val_idade);
printf("No registrado\n");
break;
case 2:
exibe_lista(head);
}
}while(op == 1 || op == 2);
}
void exibe_lista(Dados *lista)
{
Dados *temp;
temp = lista->prox;
while( temp != NULL){
printf("%5d", temp->idade);
temp = temp->prox;
}
printf("\n");
}
void insere_final(Dados *lista, int valor)
{
Dados *novo = (Dados *)malloc(sizeof(Dados));
if(!novo)
exit(1);
if(lista->prox = NULL)
{
lista->prox = novo;
novo->idade = valor;
novo->prox = NULL;
}
else
{
Dados *tmp = (Dados *)malloc(sizeof(Dados));
if(!tmp)
exit(1);
tmp->prox = lista;
while(tmp->prox != NULL)
tmp = tmp->prox;
tmp->prox = novo;
novo->idade = valor;
novo->prox = NULL;
}
}
void inicia_lista(Dados *lista)
{
lista->prox = NULL;
}