Skip to content

Instantly share code, notes, and snippets.

@hrishikesh-mishra
Created March 14, 2017 12:29
Show Gist options
  • Save hrishikesh-mishra/be5adf11916cd1046767b08f1d1d4db3 to your computer and use it in GitHub Desktop.
Save hrishikesh-mishra/be5adf11916cd1046767b08f1d1d4db3 to your computer and use it in GitHub Desktop.
Linked Stack implementation
package com.hrishikesh.narashima.ch4stack;
import java.util.Objects;
import java.util.StringJoiner;
public class LinkedStack<E> implements Stack<E> {
private int length;
private ListNode top;
@Override
public void push(E e) {
ListNode newNode = new ListNode(e);
newNode.setNext(top);
top = newNode;
length++;
}
@Override
public E pop() {
if(Objects.isNull(top))
throw new RuntimeException("Stack is underflow");
E data = (E) top.getData();
top = top.getNext();
length --;
return data;
}
@Override
public E top() {
if(Objects.isNull(top))
throw new RuntimeException("Stack is underflow");
return (E) top.getData();
}
@Override
public int size() {
return (length + 1);
}
@Override
public boolean isEmpty() {
return (length == 0);
}
@Override
public boolean isStackFull() {
return false;
}
@Override
public String toString() {
StringJoiner joiner = new StringJoiner(", ", "[", "]");
ListNode navigatorNode = top;
while (!Objects.isNull(navigatorNode)){
joiner.add(String.valueOf(navigatorNode.getData()));
navigatorNode = navigatorNode.getNext();
}
return joiner.toString();
}
}
class LinkedStackTest {
public static void main(String[] args) {
Stack stack = new LinkedStack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("Stack : " + stack);
System.out.println("Stack pop: " + stack.pop());
System.out.println("Stack top: " + stack.top());
System.out.println("Stack : " + stack);
System.out.println("Stack Size: " +stack.size());
System.out.println("Is empty: " + stack.isEmpty());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment