public class CircularList { ListItem marker; CircularList() { marker = null; } public void insert(Object x) { if (isEmpty()) { marker = new ListItem(x,null); marker.next = marker; } else marker.next = new ListItem(x, marker.next); } public Object delete() { if (isEmpty()) return null; else { Object temp = marker.next.item; if (marker.next == marker) marker = null; else marker.next = marker.next.next; return temp; } } public Object head() { if (isEmpty()) return null; else return marker.next.item; } public void move() { if (marker != null) marker = marker.next; } public boolean isEmpty() { return (marker == null); } public String toString() { String result; if (isEmpty()) result = "empty list"; else { ListItem head = marker.next; marker.next = null; // break the cycle result = head.toString(); marker.next = head; // put the cycle back } return result; } }