//方法一:用面向对象
public class ExampleArray //测试类
{
public static void main(String [] args)
{
Kidcircle kc=new Kidcircle(500); //创建Kidcircle类的对象 kc
int countNum = 0;
Kid k=kc.first; //对象.属性
while(kc.count>1) //当圈内多与一个人时记数
{
countNum++; //计数器自加
if(countNum==3) //当记数为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; //第一个
Kid last; //最后一个
Kidcircle(int n) //构造方法
{
for(int i=0;i<n;i++)
{
add(); //调用 add() 方法
}
}
void add() // add() 方法添加人
{
Kid k=new Kid(); //创建 Kid类的 对象 k
k.id = count; //对象.属性
if(count<=0) //当圈内没有人时
{
first = k; //进去一个人后 他是第一个也是最后一个左边和右边都是他本身
last = k;
k.left = k;
k.right = k;
}
else //当圈内多与两个人时
{
last.right = k;
k.left = last;
k.right = first;
first.left = k;
last = k;
}
count++; //增加1
}
void delete(Kid k) // delete() 方法 删除人
{
if(count<=0) //当没有人时
{
return ;
}
else if(count==1) //当有一个人时
{
first=null; //它既是第一个也是最后一个
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--; //总人数减1
}
}