//http://pt.stackoverflow.com/questions/158694/duvida-em-um-programa-em-c-lista-simplesmente-encadeada

#include <stdio.h>
#include <stdlib.h>

typedef struct celula_s{

    int     valor;
    struct  nodo *prox;

} lista_t;

lista_t* lista_inicializar(void);
lista_t* lista_inserir_inicio(lista_t* lista, int valor);
int lista_imprimir(lista_t* lista);

int main (int argc, char *argv[]){
    lista_t* lista = lista_inicializar();

    lista = lista_inserir_inicio(lista, 10);
    lista = lista_inserir_inicio(lista, 20);
    lista = lista_inserir_inicio(lista, 30);

    lista_imprimir(lista);
}

lista_t* lista_inicializar(void){
    lista_t* lista = (lista_t *) malloc( sizeof (lista_t) );
    //lista->valor = 0;
    //lista->prox = NULL;
    return lista;
}

lista_t* lista_inserir_inicio(lista_t* lista, int valor){
    lista_t* novo = lista_inicializar();

    if(novo != NULL){
        novo->valor = valor;
        novo->prox = lista;
        lista = novo;
    }

    return lista;
}

int lista_imprimir(lista_t* lista){
    lista_t* aux;
    aux = lista;
    printf("[");
    while (aux->prox != NULL){
        printf(" %d ", aux->valor);
        aux = aux->prox;
    }
    printf("]\n");
    return 0;
}
