黑马程序员技术交流社区
标题:
java
[打印本页]
作者:
kendn
时间:
2018-1-13 23:29
标题:
java
package TEST;
public class YueSeFu {
public static void main(String[] args) {
// TODO Auto-generated method stub
CycLink cyclink=new CycLink();
cyclink.setLen(5);
cyclink.createLink();
cyclink.show();
cyclink.setM(2);
cyclink.setK(2);
cyclink.play();
}
}
class Child
{
int no;
Child nextChild;
public Child(int no)
{
//给编号
this.no=no;
}
}
//环形链表
class CycLink{
//先定义一个指向第一个小孩的引用
//指向第一个小孩的引用不能动
Child firstChild=null;
Child temp;
int len=0;//表示共有多少小孩
int k=0;
int m=0;
public void setM(int m) {
this.m = m;
}
public void setK(int k) {
this.k = k;
}
//设置环形链表大写
public void setLen(int len){
this.len=len;
}
//开始play
public void play(){
Child temp=this.firstChild;
//先找到数数的人
for(int i=1;i<k;i++){
temp=temp.nextChild;
}
while(this.len!=1){
//数m下
for(int j=1;j<m;j++){
temp=temp.nextChild;
}
//找到要出圈的小孩
Child temp2=temp;
while(temp2.nextChild!=temp){
temp2=temp2.nextChild;
}
//将数到m的小孩,退出圈
temp2.nextChild=temp.nextChild;
//temp指向下一个小孩
temp=temp.nextChild;
this.len--;
}
//最后一个小孩
System.out.println(temp.no);
}
//创建环形链表
public void createLink(){
for(int i=1;i<=len;i++){
if(i==1)//如果创建第一个小孩//创建一个小孩
{
Child ch=new Child(i);
this.firstChild=ch;
this.temp=ch;
}
else
{ //创建最后一个小孩
if(i==len){
Child ch=new Child(i);
temp.nextChild=ch;
temp=ch;
temp.nextChild=this.firstChild;
}
else{
//继续创建小孩
Child ch=new Child(i);
temp.nextChild=ch;
temp=ch;
}
}
}
}
//打印环形链表
public void show(){
//定义一个跑龙套
Child temp=this.firstChild;
do{
System.out.print(temp.no+" ");
temp=temp.nextChild;
}
while(temp!=this.firstChild);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2