#include <stdio.h>
#include <stdlib.h>
typedef struct cel{
    int conteudo;
    struct celula *prox;
}celula;
celula *cria(void){
    return NULL;
}
celula *InsereInicio(int x,celula *p){
    celula *inserir;
    inserir = malloc(sizeof(celula));
    inserir->conteudo = x;
    inserir->prox = p;
    p = inserir;
    return p;
}
void InsereMeio(int x, celula *p){
    celula *inserir;
    inserir = malloc(sizeof(celula));
    inserir->conteudo = x;
    inserir->prox = p->prox;
    p->prox = inserir;
}
void InsereFim(int x, celula *p){
    celula *inserir;
    inserir = malloc(sizeof(celula));
    inserir->conteudo = x;
    inserir->prox = p->prox;
    p->prox = inserir;
}
void Imprimir(celula *p){
    celula *imprimir;
    for(imprimir = p; imprimir != NULL; imprimir = imprimir->prox){
        printf("END M: %p   -  VALOR: %d   - PROX END: %p \n\n",imprimir,imprimir->conteudo,imprimir->prox);
    }
}
int main(){
    int escolha,valor;
    celula *ini;
    while(escolha != -1){
        printf("CRIAR LISTA ............ 1\n");
        printf("INSERIR NO INICIO ...... 2\n");
        printf("INSERIR NO MEIO ........ 3\n");
        printf("INSERIR NO FIM ......... 4\n");
        printf("IMPRIMIR ............... 5\n");
        scanf("%d",&escolha);
        switch(escolha){
        case 1:
            ini = cria();
            break;
        case 2:
            printf("DIGITE O VALOR A SER INSERIDO NO INICIO\n");
            scanf("%d",valor);
            InsereInicio(valor,ini);
            break;
        case 3:
            printf("DIGITE O VALOR A SER INSERIDO NO MEIO\n");
            scanf("%d",valor);
            InsereMeio(valor,ini);
            break;
        case 4:
            printf("DIGITE O VALOR A SER INSERIDO NO FIM\n");
            scanf("%d",valor);
            InsereFim(valor,ini);
            break;
        case 5:
            Imprimir(ini);
            break;
        }
    }
}