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



typedef struct _stack
    {
        
        struct _stack* prev;
        struct _stack* next;
        int value;
        
    } 
    stack; 
 
 
void push( int data );
void pop(void);

stack *first = NULL;
stack *real_first = NULL;

int main(void)
{
    

    push(22);
    push(32);
    push(42);
    push(52);
    push(4);
    pop();
    pop();
    push(15);

   
    stack *temp = real_first;
    
    while (temp  != NULL)
    {   
        printf("%i ", temp ->value);
        temp  = temp->next;
       
    }
    
    temp = real_first;
    
     while (real_first != NULL)
    {   
        free(temp);
        real_first = real_first->next;
        temp  = real_first;
       
    }
    
    
    printf("\n");
    return 0;
}





void push( int data)
{
    stack *newptr =  malloc(sizeof(stack));;
    if (newptr == NULL)
    {
        return;
    }
    
    newptr->value = data;
    
    newptr->prev = NULL;
    if (first == NULL)
    {
        first = newptr;
        
        real_first = first;
        
    }
    
    else
    {   
        
        newptr->prev = first;
        
        first->next = newptr;
    
        first = newptr;
        
    }
    
    return;  
}
    

void pop(void)
{   
    stack *tmp =  real_first;
    
    if ( real_first == NULL)
        return;
    
    else if ( real_first->next == NULL)
    {   free( real_first);
         real_first = NULL;
        return;
    }
    else
    {
        
    while(real_first->next->next != NULL)
    {
    real_first= real_first->next;
    }
    
    first = NULL;
    first = real_first;
    free(real_first->next);
    real_first->next = NULL;
    
    
    }
     real_first =  tmp;
}