//stack implemented using lists

class StackAsListAlt implements SeqStructure{
 
    private class ListNode {
	public Object item;
	public ListNode next;
	public ListNode(Object o, ListNode n) {
	    item = o;
	    next = n;
	}
	
	public String toString() {
	    String temp = item.toString();
	    if (next != null) 
		temp += " " + next.toString();
	    return temp;
	}
    }
    
    private ListNode list;
    public StackAsListAlt() { }
    
    public void put(Object o) {
	list = new ListNode(o,list);
    }
    
    public Object get() {
	if (! isEmpty()){
	    Object v = list.item;
	    list = list.next;
	    return v;
	}
	else {
	    System.out.println("Empty!");
	    return null;
	}
    }

    public boolean isEmpty() {
	return (list == null);
    }
    
    public int size() {
	int v = 0;
	ListNode finger = list;
	while (finger != null) {
	    v++;
	    finger = finger.next;
	}
	return v;
    }
    
    public String toString() {
	if (isEmpty()) return "Empty Stack";
	return "Stack elements from top to bottom:" + list;
    }
}

public class TestStackAsListAlt {
    public static void main(String[] args) {
	StackAsList s = new StackAsList();
	s.put("Billy");
	s.put("Silly");
	System.out.println(s);
	System.out.println(s.get());
	System.out.println(s.get());
    }
}
