public class Ring { Ring left; Ring right; Object value; Ring(Object value) { this.value = value; left = this; right = this; } public Object value() { return value; } public Ring left() { return left; } public Ring right() { return right; } public String toString() { Ring r = this; String ans = "Ring["; do { if (r != this) ans = ans + ", "; ans = ans + r.value.toString(); r = r.right; } while (r != this); return ans + "]"; } public void join(Ring r) { r.left.right = right; right.left = r.left; r.left = this; right = r; } public void insert(Object value) { join(new Ring(value)); } public static class Exception extends java.lang.Exception {} public static Ring fromArray(Object[] array) throws Ring.Exception { if (array.length == 0) throw new Ring.Exception(); Ring r = new Ring(array[0]); for (int i = array.length-1; i > 0; i--) { r.insert(array[i]); } return r; } public static void main(String[] args) throws java.io.IOException, Ring.Exception { String[] abc = {"a", "b", "c"}; Ring a = fromArray(abc); System.out.println(a); // Ring[a, b, c] Ring d = new Ring("d"); Ring f = new Ring("f"); d.join(f); d.insert("e"); System.out.println(d); // Ring[d, e, f] a.join(d); System.out.println(a); // Ring[a, d, e, f, b, c] System.out.println(d); // Ring[d, e, f, b, c, a] a.join(f); System.out.println(a); // Ring[a, f, b, c] System.out.println(d); // Ring[d, e] System.in.read(); } }