SOURCE CODE: import java.util.Iterator; public class CircularLinkedList implements Iterable { Node head , tail; int size; CircularLinkedList() { head = null; tail = null; size = 0; } public boolean add(E e) { Node ele = new Node(e); ele.next = head; if(head == null) { head = ele; ele.next = head; tail = head; } else { tail.next = ele; tail = ele; } size++; return true; } public boolean add(int index, E e){ Node ele = new Node(e); Node ptr = head; index = index - 1 ; for (int i = 1; i < size - 1; i++) { if (i == index) { Node tmp = ptr.next; ptr.next = ele; ele.next = tmp; break; } ptr = ptr.next; } size++ ; return true; } private Node getNode(int index ) { return null; } public E remove(int index) { Node ret; if (size == 1 && index == 1) { ret = head; head = null; tail = null; size = 0; return ret.getElement(); } if (index == 1) { ret = head; head = head.next; tail.next = head; size--; return ret.getElement(); } if (index == size) { Node s = head; Node t = head; while (s != tail) { t = s; s = s.next; } ret = tail; tail = head; tail = t; size --; return ret.getElement(); } Node ptr = head; index = index - 1 ; for (int i = 1; i < size - 1; i++) { if (i == index) { Node tmp = ptr.next; tmp = tmp.next; ptr.next = tmp; break; } ptr = ptr.next; } size-- ; return ptr.getElement(); } public String toString() { Node current = head; String result = \"\"; if(size == 0){ return \"\"; } if(size == 1) { return head.getElement().toString(); } else{ do{ result = result + current.getElement().toString(); result = result + \" ==> \"; current = current.next; } while(current != head); } return result; } public Iterator iterator() { return new ListIterator(); } private class ListIterator implements Iterator{ Node nextItem; Node prev; int index; @SuppressWarnings(\"unchecked\") public ListIterator(){ nextItem = (Node) head; index = 0; } public boolean hasNext() { return size != 0; } public E next() { prev = nextItem; nextItem = nextItem.next; index = (index + 1) % size; return prev.getElement(); } public void remove() { int target; if(nextItem == head) { target = size - 1; } else{ target = index - 1; index--; } CircularLinkedList.this.remove(target); //calls the above class } } // Solve the problem in the main method // The answer of n = 13, k = 2 is // the 11th person in the ring (index 10) public static void main(String[] args){ CircularLinkedList l = new CircularLinkedList(); int n=13; int k=2; for(int i=1;i<=n;i++) l.add(Integer.valueOf(i)); int j = 13,i=0; while(j>0) { System.out.println(l.toString()); i = i + k; if(i>j) i = k; l.remove(i); j--; } } } OUTPUT: 1 ==> 2 ==> 3 ==> 4 ==> 5 ==> 6 ==> 7 ==> 8 ==> 9 ==> 10 ==> 11 ==> 12 ==> 13 ==> 1 ==> 3 ==> 4 ==> 5 ==> 6 ==> 7 ==> 8 ==> 9 ==> 10 ==> 11 ==> 12 ==> 13 ==> 1 ==> 3 ==> 4 ==> 6 ==> 7 ==> 8 ==> 9 ==> 10 ==> 11 ==> 12 ==> 13 ==> 1 ==> 3 ==> 4 ==> 6 ==> 7 ==> 9 ==> 10 ==> 11 ==> 12 ==> 13 ==> 1 ==> 3 ==> 4 ==> 6 ==> 7 ==> 9 ==> 10 ==> 12 ==> 13 ==> 1 ==> 4 ==> 6 ==> 7 ==> 9 ==> 10 ==> 12 ==> 13 ==> 1 ==> 4.