Tenho esse código em C que permite adicionar no inicio e no fim da lista e remover do inicio da lista, precisava criar um método para remover do fim da lista, porém não estou conseguindo, alguém pode me ajudar?
 
	     
	   
 
 typedef struct abstracao
    {
        int valor;
        struct abstracao *prox;
    }lista;
    
    lista *inicio;
    lista *aux;
    lista *fim;
    
    int op, x, contador;
    
    void InserirInicio(int a)
    {
        printf(" ---- -INSERIR- ----");
        struct abstracao *novo = malloc(sizeof(struct abstracao));
    
        novo->valor = a;
    
        if (inicio ==NULL)
        {
            inicio = novo;
            fim = novo;
            fim->prox = NULL;
        }
        else
        {
            novo->prox = inicio;
            inicio = novo;
        }
        contador++;
    }
    
    void Apresentar()
    {
        if(inicio == NULL)
            printf("Lista esta VAZIA.\n");
        else
        {
            aux = inicio;
            printf("\n");
    
            while(aux!=NULL)
            {
                printf(" %d - ", aux->valor);
                aux = aux->prox;
            }printf("\n");
            printf("Quantidade de elemento da lista: %d\n", contador);
        }
    }
    
    void RemoverInicio()
    {
        aux = inicio;
        inicio = aux->prox;
        free(aux);
        aux = inicio;
    }
    
    void InserirFinal(int a)
    {
        printf(" ---- - INSERIR- ----\n");
            struct abstracao *novo = malloc(sizeof(struct abstracao));
    
            novo->valor = a;
    
            if(inicio==NULL)
            {
                inicio = novo;
                fim = novo;
                fim->prox = NULL;
            }
            else
            {
                fim->prox = novo;
                fim=novo;
                fim->prox = NULL;
            }
    }
    
    void main()
    {
        inicio = NULL;
        aux = NULL;
    
        do
        {
            printf(" --- Digite uma opção para lista --- \n");
            printf("1 - Inserir no INICIO\n");
            printf("2 - Apresentar\n");
            printf("3 - Remover\n");
            printf("4 - Inserir FINAL\n");
            printf("5 - Remover FINAL\n");
            scanf("%d", &op);
    
            switch(op)
            {
                case 1:
                {
                    printf("Digite um valor para inserir na lista: \n");
                    scanf("%d", &x);
                    InserirInicio(x);
                }break;
    
                case 2:
                {
                    Apresentar();
                }break;
    
                case 3:
                {
                    RemoverInicio();
                }break;
    
                case 4:
                {
                    printf("Digite um valor para inserir na lista: \n");
                    scanf("%d", &x);
                    InserirFinal(x);
                }break;
    
                case 5:
                {
                    RemoverFinal();
                }
            }
    
        }while (op<6);
    }