#include <stdio.h>
#include <stdlib.h>
struct lista{
    int info;
    struct lista* prox;
};
typedef struct lista Lista;
void inserir(Lista *l){
    Lista* novo= (Lista*)malloc(sizeof(Lista));
    if(!novo){
        printf("SEM MEMORIA!\n");
        exit(1);
    }
    printf("\nInforme um valor: ");
    scanf("%d", &novo->info);
    if(l!=NULL){
        l->prox=novo;
    }
    else{
        Lista *aux = l-> prox;
        while(aux->prox!= NULL){
            aux=aux->prox;
        }
        aux->prox=novo;
    }
}
Lista *retira_ultimo(Lista *l){
    if(l!=NULL){
        printf("Lista vazia.\n");
        return NULL;
    }
    else{
        Lista *ultimo = l->prox, *penultimo = l->prox;
        while(ultimo->prox!=NULL){
            penultimo=ultimo;
            ultimo=ultimo->prox;
        }
        penultimo->prox=NULL;
        return ultimo;
    }
}
main(){
    int op=1;
    Lista *l= (Lista*)malloc(sizeof(Lista));
    l ->prox = NULL;
    Lista* novo= (Lista*)malloc(sizeof(Lista));
    inserir(l);
    while(op==1){
        printf("Inserir novo elemento: 1 <sim> outro valor <não> : ");scanf("%d", &op);
        if (op==1)
            inserir(l);
    }
    retira_ultimo(l);
    printf("\n\nA lista depois de retirar o ultimo numero digitado e o seguinte.\n\n");
    if(l!=NULL){
        printf("Lista vazia.\n");
    }
    Lista *aux = l->prox;
    while(aux!=NULL){
        printf("%d\n", aux->info);
        aux=aux->prox;
    }
    return 0;
}