java练习7.17

package com.lianxi;

    class Child{
        int num;
        Child nextChild=null;
        public Child(int num){
            this.num=num;
        }
    }
    
    

   class CycLink{
        Child firstChild=null;
        Child temp=null;
        int len=0;//表示共有几个小孩
        int k=0;
        int m=0;
        public void setM(int m){
            this.m=m;
        }
        
        
        //设置链表的大小
        public void setLen(int len){
             this.len=len;
        }
    
         //设置第几个人开始数数
        public void setK(int k){
             this.k=k;
        }
    
        //开始play
        public void play(){
             Child temp=this.firstChild;
             //1.先找到开始数数的人
             for(int i=1;i<k;i++){
                temp=temp.nextChild;            
             }
             while(this.len!=1){
             //2.数m下
                for(int j=1;j<m;j++){
                   temp=temp.nextChild;
                }
            //找到要出圈的前一个小孩
                 Child temp2=temp;
                 while(temp2.nextChild!=temp){
                      temp2=temp2.nextChild;
                 }
                 System.out.println(temp2.nextChild.num);
            //3.将数到m的小孩,退出圈
            temp2.nextChild=temp.nextChild;
            //让temp指向下一个数数的小孩
            temp=temp.nextChild;
            this.len--;
            }  
            System.out.println(temp.num);
        }

    

        //初始化环形链表
        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.println(temp.num+"");
                temp=temp.nextChild;
            }while(temp!=this.firstChild);
        }
  }

public class Circle { 
     public static void main(String[] args) {
         CycLink p =new CycLink();
            p.setLen(5);//链表长度
            p.createLink();//创建链表
            p.setK(1);//从第几个开始数
            p.setM(3);//数几下
            p.show();
            p.play();
    }

}

猜你喜欢

转载自blog.csdn.net/qq_42707075/article/details/81079258