// stack implemented using lists

public class StackAsList implements SeqStructure {
    
    private SLL list;
    private int SP;

    public StackAsList() { 
	list = new SLL();
    }
    
    // Put: prepend o to list:
    public void put(Object o) {
	list.prepend(o);
	SP++;
    }

    // Get: remove o from head of list:
    public Object get() {
	if (isEmpty()) {
	    System.out.println("Empty list!");
	    return null;
	}
	Object result = list.getHead().getItem(); // get head of list
	list.remove(result); // remove head of list
	SP--; // adjust SP
	return result;
    }

    // Look at top of stack, but no pop:
    public Object peek() {
	if (isEmpty()) 
	    return null;
	return list.getHead();
    }
    
    // Empty?
    public boolean isEmpty() {
	return (SP==0);
    }
    
    // Size:
    public int size() {
	return SP;
    }
    
    // Stringify:
    public String toString() {
        return "LIFO: ["+list+"]";
    }
    
}
