• 数据结构 环形链表(约瑟夫环)


    package com.数据结构;
    
    import java.util.Scanner;
    
    public class 环形链表_约瑟夫环 {
        //有n个人围成一圈,顺序从1开始排号。从第m个人开始报数(从1到3报数),凡报到k的人退出圈子.
        // 问最后留下的是原来第几号的那位。要求用循环链表实现。
        //环形链表 (约瑟夫环) ----- 其实没学数据结构之前我就用环形链表做出来了,hahahhah
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            YouXi youXi = new YouXi(n,1,3);
            youXi.sheng();
            youXi.out();
        }
    }
    class YouXi{
        public int n ;
        public int m ;
        public int k ;
        public Boy is ; //初始化后指向第一个位置
        public Boy ok ; //初始化后指向最后一个位置
        public YouXi(int n, int m, int k) { //一共n个小朋友 从第m个人开始 报到k出圈
            this.n = n;
            this.m = m;
            this.k = k;
        }
        public void sheng(){  //生成环形链表
            for(int i=1;i<=n;i++){ //生成n个小孩
                if(i==1){
                    is = new Boy(i);
                    ok = is ;
                    is.next = is ;
                }else{
                    ok.next = new Boy(i);
                    ok = ok .next ;
                    ok.next = is ;
                }
            }
            for(int i=0;i<m-1;i++){ //将两个指针移到指定位置
                is = is.next;
                ok = ok.next;
            }
        }
        public void out(){
            while(is!=ok){
                for(int i=0;i<k-1;i++){
                    is = is.next;
                    ok = ok.next;
                }
               // System.out.println(is);
                is = is.next;
                ok.next = is;
            }
            System.out.println(is);
        }
        public void printf(){ //打印链表情况
            if(is==null)    return ;
            Boy temp = is ;
            for(int i=0;i<n;i++){
                System.out.println(temp);
                temp = temp.next ;
            }
        }
    }
    class Boy{   //小孩
        public int id ; //编号
        public Boy next ;
    
        public Boy(int id) {
            this.id = id;
        }
    
        @Override
        public String toString() {
            return String.valueOf(this.id);
        }
    }
    
    
  • 相关阅读:
    【JZOJ4244】yi【贪心】
    【JZOJ4244】yi【贪心】
    基本赋值运算符
    自增自减运算符
    字符串的+操作
    算术运算符
    数据类型转换
    键盘输入使用
    基本数据类型长度
    变量
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14847944.html
Copyright © 2020-2023  润新知