约瑟夫(环)问题(Josephu)(单向环形链表)

问题描述

在这里插入图片描述

代码实现

package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** @创建人 wdl* @创建时间 2021/3/19* @描述*/
public class Josepfu {public static void main(String[] args) {//测试一把看看构建的环形链表和遍历是否正确CircleSingleLinkedList circleSingleLinkedList=new CircleSingleLinkedList();circleSingleLinkedList.addBoy(125);//加入5个小孩节点circleSingleLinkedList.showBoy();//测试一把小孩出圈是否正确circleSingleLinkedList.countBoy(10,20,125);}
}//创建一个环形的单向链表
class CircleSingleLinkedList{//创建一个first节点,当前没有编号private  Boy first=null;//添加小孩节点,构建成一个环形的链表public void addBoy(int nums){//nums做一个数据校验if(nums<1){System.out.println("nums的值不正确");return;}Boy curBoy=null;//辅助指针,帮助我们构建环形链表//使用for来创建我们的环形链表for (int i = 1; i <=nums; i++) {//根据编号,创建小孩节点Boy boy=new Boy(i);//如果是第一个小孩if(i==1){first=boy;first.setNext(first);//构成环curBoy=first;//让curBoy指向第一个小孩}else {curBoy.setNext(boy);boy.setNext(first);curBoy=boy;}}}//遍历当前的环形链表public void showBoy(){//判断链表是否为空if(first==null){System.out.println("没有任何小孩");return;}//因为first不能动,因此我们仍然使用一个辅助指针完成遍历Boy curBoy=first;while (true){System.out.println("小孩的编号"+curBoy.getNo());if (curBoy.getNext()==first){//说明已经遍历完毕break;}curBoy=curBoy.getNext();}}//根据用户的输入,计算出小孩出圈的顺序/**** @param startNo 表示从第几个小孩开始数数* @param countNum  表示数几下* @param nums  表示最初有多少个小孩在圈中*/public void countBoy(int startNo,int countNum,int nums){//先对数据进行校验if(first==null||startNo<1||startNo>nums){System.out.println("参数输入有误,请重新输入");return;}//创建一个辅助指针,帮助完成小孩出圈Boy helper=first;//需要创建一个辅助指针(变量)helper,事先应该指向环形链表的最后这个节点while (true){if(helper.getNext()==first){//说明helper指向了最后小孩节点break;}helper=helper.getNext();}//小孩报数前,先让first和helper移动k-1次for (int j = 0; j < startNo - 1; j++) {first=first.getNext();helper=helper.getNext();}//当小孩报数时,让first和helper指针同时的移动m-1次,然后出圈//这里是一个循环操作,直到圈中只有一个节点while (true){if (helper==first){//说明圈中只有一个节点break;}//让first和helper指针同时的移动countNum-1次,然后出圈for (int j = 0; j < countNum - 1; j++) {first=first.getNext();helper=helper.getNext();}//这时first指向的节点,就是要出圈的小孩节点System.out.println("小孩"+first.getNo()+"出圈");//这时将first指向的节点出圈first=first.getNext();helper.setNext(first);}System.out.println("最后留在圈中的小孩编号"+helper.getNo());}}//创建一个Boy类,表示一个节点
class Boy{private int no;//编号private Boy next;//指向下一个节点,默认为nullpublic Boy(int no){this.no=no;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public Boy getNext() {return next;}public void setNext(Boy next) {this.next = next;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+vscode+nodejs 开发环境搭建

参考文献 vuevscodenodejs 开发环境搭建 - Desperador - 博客园 nodejs 指定全局安装路径和缓存路径 - Curedfisher - 博客园 安装配置nodejs并创建Vue项目 vscode下载地址&#xff1a; Documentation for Visual Studio Code nodejs安装配置 1.下载 地址&#xff1a; …

用数组模拟栈

思路分析 代码实现 package com.atguigu.stack;import com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2;import java.net.ServerSocket; import java.util.ArrayList; import java.util.Scanner; import java.util.Stack;/*** 创建人 wdl* 创建时间 2021/3/20* 描述…

Redis PK Memcached,哪个更牛叉

转载自 Redis PK Memcached&#xff0c;哪个更牛叉 说到 redis 就会联想到 memcached&#xff0c;反之亦然。了解过两者的同学有那么个大致的印象&#xff1a; redis 与 memcached 相比&#xff0c;不仅支持简单的 key-value 数据类型&#xff0c;同时还提供 list,set,zset,ha…

CoreCLR源码探索(三) GC内存分配器的内部实现

在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分.在这一篇中我将详细讲解GC内存分配器的内部实现.在看这一篇之前请必须先看完微软BOTR文档中的"Garbage Collection Design",原文地址是: https://github.com/dotnet/coreclr/blob/master/Doc…

vue学习1

P1 01_Vue学习目标03:50 P2 02_前端知识体系16:27 P3 03_前后端分离的演变史17:13 P4 04_前端MVVM模式09:31 P5 05_Vue是什么07:23 P6 06_第一个Vue应用程序07:06 P7 07_Vue实例声明周期05:35 P8 08_条件渲染06:59 P9 09_列表渲染03:34 P10 10_事件处理03:44…

Tomcat 的 Server 文件配置详解

转载自 Tomcat 的 Server 文件配置详解 前言 Tomcat隶属于Apache基金会&#xff0c;是开源的轻量级Web应用服务器&#xff0c;使用非常广泛。server.xml是Tomcat中最重要的配置文件&#xff0c;server.xml的每一个元素都对应了Tomcat中的一个组件&#xff1b;通过对xml文件中…

.Net基础体系和跨框架开发普及

.net体系经过十几年发展&#xff0c;发生了很多变化。特别是在最近两年&#xff0c;随着开源和跨平台的发展&#xff0c;衍生出很多概念&#xff0c;像标准库&#xff0c;可移植库&#xff0c;.Net Core等&#xff0c;相信有不少同学对他们之间的关系是有一些困惑的&#xff0c…

‘1‘ VS 1

‘1’-481; 把字符转换为数字&#xff0c;利用ASCALL表

一次恐怖的 Java 内存泄漏排查实战

转载自 一次恐怖的 Java 内存泄漏排查实战 最近在看《深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践》&#xff08;第二版&#xff09;这本书&#xff0c;理论实践结合&#xff0c;深入浅出&#xff0c;强烈推荐给大家。 这两天对JVM内容进行了一个讨论&#xff0c;…

ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

在你将现有的用户登录&#xff08;Sign In&#xff09;站点从ASP.NET迁移至ASP.NET Core时&#xff0c;你将面临这样一个问题——如何让ASP.NET与ASP.NET Core用户验证Cookie并存&#xff0c;让ASP.NET应用与ASP.NET Core应用分别使用各自的Cookie&#xff1f;因为ASP.NET用的是…

vue学习2

P1 01_Vue学习目标03:50 P2 02_前端知识体系16:27 P3 03_前后端分离的演变史17:13 P4 04_前端MVVM模式09:31 P5 05_Vue是什么07:23 P6 06_第一个Vue应用程序07:06 P7 07_Vue实例声明周期05:35 P8 08_条件渲染06:59 P9 09_列表渲染03:34 P10 10_事件处理03:44…

一道非常棘手的 Java 面试题:i++ 是线程安全的吗

转载自 一道非常棘手的 Java 面试题&#xff1a;i 是线程安全的吗 i 是线程安全的吗&#xff1f; 相信很多中高级的 Java 面试者都遇到过这个问题&#xff0c;很多对这个不是很清楚的肯定是一脸蒙逼。内心肯定还在质疑&#xff0c;i 居然还有线程安全问题&#xff1f;只能说…

Microsoft规划了.NET的未来发展

Microsoft的Mads Torgersen分享了.NET语言家族的更新策略&#xff0c;给出了对公司未来的功能考虑的深刻理解。虽然C#、VB.NET和F#的开发是通过GitHub公开进行的&#xff0c;但是Microsoft的长远规划却经常是保密的。公众如果对Microsoft目前思考问题的方式有相关的意见和建议的…

逆波兰计算器实现

逆波兰计算器 思路分析 代码实现 package com.atguigu.stack;import java.security.AlgorithmConstraints; import java.util.ArrayList; import java.util.List; import java.util.Stack;/*** 创建人 wdl* 创建时间 2021/3/20* 描述*/ public class PolandNotation {public …

逆波兰表达式中缀表达式转换为后缀表达式

中缀表达式转换为后缀表达式 思路分析 代码实现 package com.atguigu.stack;import javax.swing.plaf.nimbus.State; import java.security.AlgorithmConstraints; import java.util.ArrayList; import java.util.List; import java.util.Stack;/*** 创建人 wdl* 创建时间 20…

OSS.Common扩展.Net Standard支持实例分享

上篇&#xff08;.Net基础体系和跨框架开发普及&#xff09;介绍了.Net当前生态下的大概情况&#xff0c;也分享了简单实现的过程&#xff0c;这篇文章就是讲解我的OSS.Common项目扩展.Net Standard 支持的过程&#xff0c;主要集中在&#xff1a;方案的选择&#xff0c;移植检…

A configuration error occurred during startup.Please verify the preference field with the prompt: To

今天遇到了一个棘手的问题&#xff0c;到现在都没有解决&#xff0c;折腾了一天结果捣鼓出来个更棘手的问题&#xff0c;经过多方继续折腾&#xff0c;终于把后来的这个问题给搞定了&#xff0c;但是前面的问题还是没有解决。有遇到相类似的问题解决了的麻烦分享一下&#xff0…

150. 逆波兰表达式求值---JAVA---LeetCode

class Solution {public int evalRPN(String[] tokens) {//创建一个栈&#xff0c;只需要一个栈即可Stack<Integer> stack new Stack<>();//遍历 lsfor(String item:tokens){//这里使用正则表达式来取出数if(isNumber(item)){//匹配的是多位数//入栈stack.push(In…