package com.interview.basics.model.collection.stack; import com.interview.basics.model.collection.list.Node; import com.interview.basics.model.collection.stack.Stack; public class LinkedStack<T> implements Stack<T> { private Node<T> head = null; private int size = 0; @Override public void push(T item) { Node<T> node = this.head; head = new Node<T>(item); head.next = node; this.size ++; } @Override public T pop() { if(this.head != null){ T node = this.head.item; this.head = this.head.next; this.size --; return node; } else { return null; } } @Override public boolean isEmpty() { return this.head == null; } @Override public int size() { return this.size; } @Override public T get(int i) { if (i >= size) return null; Node<T> node = getNode(i); if (node != null) return node.item; else return null; } protected Node<T> getNode(int index) { int i = 0; Node<T> current = head; while (i++ < index) current = current.next; return current; } @Override public T peek() { return this.head == null ? null : this.head.item; } }