public class LinkedList2 implements List { private Object myhead; private LinkedList2 mytail; private boolean empty; private LinkedList2(Object h, LinkedList2 t) { myhead=h; mytail=t; } private LinkedList2() { empty=false; } public static List empty() { return new LinkedList2(); } public List cons(Object o) { return new LinkedList2(o, new LinkedList2(myhead, mytail)); } public boolean isempty() { return empty; } public Object head() { return myhead; } public List tail() { return mytail; } public String toString() { if(isempty()) return "[]"; else return "["+myhead.toString()+tailToString(mytail); } private static String tailToString(List L) { if(L.isempty()) return "]"; else return ","+L.head().toString()+tailToString(L.tail()); } }