// given an LI -
// keep adding at the head for push
// keep removing at the head for pop
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node (int data) {
this->data = data;
this->next = NULL;
}
};
class Stack {
public:
Node* linkedList = new Node(-1);
void push(Node* A);
int pop();
void display();
};
void Stack::push(Node* A) {
A->next = linkedList;
linkedList = A;
}
int Stack::pop() {
int elementToBeDeleted = linkedList->data;
if(elementToBeDeleted == -1) {
cout << "Empty Stack!";
return -1;
}
linkedList = linkedList->next;
return elementToBeDeleted;
}
void Stack::display() {
Node* iterator = linkedList;
while(iterator->data != -1) {
cout << iterator->data << " ";
iterator = iterator->next;
}
cout << endl;
}
int main() {
Node* node1 = new Node(10);
Node* node2 = new Node(20);
Node* node3 = new Node(30);
Stack myStack;
myStack.push(node1);
myStack.display();
myStack.push(node2);
myStack.display();
myStack.push(node3);
myStack.display();
int deletedElement1 = myStack.pop();
cout << "deleted element: " << deletedElement1 << endl;
myStack.display();
int deletedElement2 = myStack.pop();
cout << "deleted element: " << deletedElement2 << endl;
myStack.display();
int deletedElement3 = myStack.pop();
cout << "deleted element: " << deletedElement3 << endl;
myStack.display();
int deletedElement4 = myStack.pop();
myStack.display();
return 0;
}