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

typedef struct node {
    
    int val;
    struct node* next;

} STACK;

STACK* push (STACK* stack, int val);
STACK* pop (STACK** stack);
void printStack (STACK* stack);

int main (void) {
    
    STACK* stack = NULL;
    
    printStack (stack);
    stack = push (stack, 5);
    stack = push (stack, 4);
    stack = push (stack, 3);
    printStack (stack);
    pop (&stack);
    pop (&stack);
    printStack (stack);
    stack = push (stack, 2);
    printStack (stack);
    pop (&stack);
    printStack (stack);
    pop (&stack);
    printStack (stack);
    stack = push (stack, 6);
    printStack (stack);
    pop (&stack);
    printStack (stack);
    
    return 0;
    
}


STACK* push (STACK* stack, int val) {
    
    STACK* pNew = malloc (sizeof (STACK));
    pNew->val = val;
    pNew->next = stack;
    stack = pNew;
    
    return stack;
     
}


STACK* pop (STACK** stack) {
    
    STACK* temp = *stack;
    
    if (temp) {
        
        *stack = temp->next;
        temp->next = NULL;
        
    }
    
    return temp; 
    
}


void printStack (STACK* stack) {
    
    if (!stack) {
        
        printf ("Stack is empty\n");
        return;
    }
    
    printf ("Stack has:");
    
    while (stack) {
        
        printf (" %d", stack->val);
        stack = stack->next;
        
    }
    
    putchar ('\n');
    
    return;
    
}
