diff --git a/data_structures/Stacks/StackOfLinkedList.java b/data_structures/Stacks/StackOfLinkedList.java new file mode 100644 index 00000000..8903e52f --- /dev/null +++ b/data_structures/Stacks/StackOfLinkedList.java @@ -0,0 +1,98 @@ +/** + * + * @author Varun Upadhyay (https://github.com/varunu28) + * + */ + +// An implementation of a Stack using a Linked List + +class StackOfLinkedList { + + public static void main(String[] args) { + + LinkedListStack stack = new LinkedListStack(); + stack.push(1); + stack.push(2); + stack.push(3); + stack.push(4); + + stack.printStack(); + + System.out.println("Size of stack currently is: " + stack.getSize()); + + stack.pop(); + stack.pop(); + + } + +} + +// A node class + +class Node { + public int data; + public Node next; + + public Node(int data) { + this.data = data; + this.next = null; + } +} + +/** + * A class which implements a stack using a linked list + * + * Contains all the stack methods : push, pop, printStack, isEmpty + **/ + +class LinkedListStack { + + Node head = null; + int size = 0; + + public void push(int x) { + Node n = new Node(x); + if (getSize() == 0) { + head = n; + } + else { + Node temp = head; + n.next = temp; + head = n; + } + size++; + } + + public void pop() { + if (getSize() == 0) { + System.out.println("Empty stack. Nothing to pop"); + } + + Node temp = head; + head = head.next; + size--; + + System.out.println("Popped element is: " + temp.data); + } + + public void printStack() { + + Node temp = head; + System.out.println("Stack is printed as below: "); + while (temp != null) { + System.out.print(temp.data + " "); + temp = temp.next; + } + System.out.println(); + + } + + public boolean isEmpty() { + return getSize() == 0; + } + + public int getSize() { + return size; + } + +}