Start Typing !!! type the highlighted character. You can't scroll once you start typing.
filename

StackOfLinkedList.java

package DataStructures.Stacks;⏎

⏎

import java.util.NoSuchElementException;⏎

⏎

/**⏎

* @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.push(5);⏎

⏎

System.out.println(stack);⏎

⏎

System.out.println("Size of stack currently is: " + stack.getSize());⏎

⏎

assert stack.pop() == 5;⏎

assert stack.pop() == 4;⏎

⏎

System.out.println("Top element of stack currently is: " + stack.peek());⏎

}⏎

}⏎

⏎

// 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⏎

* <p>⏎

* Contains all the stack methods : push, pop, printStack, isEmpty⏎

**/⏎

⏎

class LinkedListStack {⏎

⏎

/**⏎

* Top of stack⏎

*/⏎

Node head;⏎

⏎

/**⏎

* Size of stack⏎

*/⏎

private int size;⏎

⏎

/**⏎

* Init properties⏎

*/⏎

public LinkedListStack() {⏎

head = null;⏎

size = 0;⏎

}⏎

⏎

/**⏎

* Add element at top⏎

*⏎

* @param x to be added⏎

* @return <tt>true</tt> if add successfully⏎

*/⏎

public boolean push(int x) {⏎

Node newNode = new Node(x);⏎

newNode.next = head;⏎

head = newNode;⏎

size++;⏎

return true;⏎

}⏎

⏎

/**⏎

* Pop element at top of stack⏎

*⏎

* @return element at top of stack⏎

* @throws NoSuchElementException if stack is empty⏎

*/⏎

public int pop() {⏎

if (size == 0) {⏎

throw new NoSuchElementException("Empty stack. Nothing to pop");⏎

}⏎

Node destroy = head;⏎

head = head.next;⏎

int retValue = destroy.data;⏎

destroy = null; // clear to let GC do it's work⏎

size--;⏎

return retValue;⏎

}⏎

⏎

/**⏎

* Peek element at top of stack⏎

*⏎

* @return element at top of stack⏎

* @throws NoSuchElementException if stack is empty⏎

*/⏎

public int peek() {⏎

if (size == 0) {⏎

throw new NoSuchElementException("Empty stack. Nothing to pop");⏎

}⏎

return head.data;⏎

}⏎

⏎

@Override⏎

public String toString() {⏎

Node cur = head;⏎

StringBuilder builder = new StringBuilder();⏎

while (cur != null) {⏎

builder.append(cur.data).append("->");⏎

cur = cur.next;⏎

}⏎

return builder.replace(builder.length() - 2, builder.length(), "").toString();⏎

}⏎

⏎

/**⏎

* Check if stack is empty⏎

*⏎

* @return <tt>true</tt> if stack is empty, otherwise <tt>false</tt>⏎

*/⏎

public boolean isEmpty() {⏎

return size == 0;⏎

}⏎

⏎

/**⏎

* Return size of stack⏎

*⏎

* @return size of stack⏎

*/⏎

public int getSize() {⏎

return size;⏎

}⏎

}⏎