/*
*学习功能: 数三退一(自己还不是很明白 main函数中的循环,第一次删除的k是first还是第三个k??????)//希望 各位大侠看到后指点一下
*整理: 孔华生 2012-10-28
*/
public class Count3Quit{
public static void main(String[] args){
KidCircle kc = new KidCircle(500);
int countNum = 0;
Kid k=kc.first;
while(kc.count>1){
countNum++;
if(countNum==3){
countNum=0;
kc.delete(k);
}
k=k.right;
}
System.out.println(kc.first.id);
}
}
class Kid{
int id;
Kid left;
Kid right;
}
//一下代码相当于创建一个循环链表
class KidCircle{
int count = 0;
Kid first, last;
KidCircle(int n){
for (int i=0;i<=n;i++){
add();
}
}
public void add(){
Kid k = new Kid();
k.id = count;
if(count<=0)
{
first = k;
last = k;
k.left =k;
k.right = k;
}
else {
last.right = k;
k.right =first;
k.left = last;
first.left = k;
last = k;
}
count++;
}
void delete(Kid k){
if(count<=0){
return ;
}
else if(count ==1)
{
first = last=null;
}
else
{
k.left.right = k.right;
k.right.left = k.left;
if(k==first)
{
first = k.right;
}
else if (k==last)
{
last = k.left;
}
}
count--;
}
}