SOURCE CODEimport java.util.Iterator;public class CircularLinke.pdf
1. 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 ;
2. 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();
}
3. 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){
4. 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;
}
5. 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());
7. 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;
}
8. 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;
9. 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;
10. } 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;
11. 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 ==>