public class CircularList { private ListItem marker; CircularList() { marker = null; } public void insert(Object x) { if (isEmpty()) { // why can't the following two lines be done at the same time? marker = new ListItem(x,null); marker.setNext(marker); } else marker.setNext(new ListItem(x, marker.getNext())); } public Object delete() { if (isEmpty()) return null; else { Object temp = marker.getNext().getItem(); if (marker.getNext() == marker) marker = null; else marker.setNext(marker.getNext().getNext()); return temp; } } public Object head() { if (isEmpty()) return null; else return marker.getNext().getItem(); } public void move() { if (marker != null) marker = marker.getNext(); } public boolean isEmpty() { return (marker == null); } public String toString() { String result; if (isEmpty()) result = "empty list"; else { ListItem head = marker.getNext(); marker.setNext(null); // break the cycle result = head.toString(); marker.setNext(head); // put the cycle back } return result; } }