#include <stdio.h>
#include <stdlib.h> // para alocar memória (malloc)
// Aqui definimos a estrutura que será usada
// para gerar a lista, a qual ira conter apenas
// o valor a ser armazenado e se sucessor.
typedef struct estru
{
int num;
struct estru *prox; // *prox será outra estrutura
// dentro da mesma
} lista; // nome que usaremos para chamar essa estrutura
lista *p, *q, *start=NULL; // 2 ponteiros de apoio e o inicio da lista
// Função responsavel por adicionar um nova estrtura a lista
pushToList(int val)
{
p = malloc(sizeof(lista)); // ponteiro do tamanho da estrutura
p->num = val; // estrura num recebe um valor
// caso seja o primeiro valor,
// o começo da lista é definido
if(start == NULL) start = p;
// Caso contrario q->prox (nó anterior) recebe esse nó
else q->prox = p;
q = p; // esse nó é salvo para ser usado em seguida
}
showList()
{
p = start;
while(p != NULL)
{
printf("%d -> ", p->num); // Mostra valor dentro do nó
p = p->prox; // avança a lista
}
printf("Fim da lista");
}
int main(void) {
int numero;
while(1)
{
printf("Digite o valor a ser add ou -1 para sair: ");
scanf("%d", &numero);
printf("%d\n", numero);
if(numero == -1) break; // se numero for -1, o loop é qubrado
pushToList(numero);
}
printf("\n");
showList(); // Mostra lista gerada;
free(start);
return 0;
}