数据结构之单向环形列表解决josef问题

1.定义节点类

   该节点类中只有孩子的编号,以及指向下一个节点的"指针"

 

package com.ebiz.list.josepfu;/*** @author YHj* @create 2019-07-17 22:21* 表示节点的类*/
public class Boy {private int no;private Boy next;  //指向下一个节点public 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;}@Overridepublic String toString() {return "我是第" + no + "个Boy";}}

2.定义单向链表类

   需要注意的是,josef问题是头尾相连的,在这也就是最后一个节点需要指向第一个节点,如果只有一个节点,那么该节点需要指向节点本身.

   解决josef问题,关键是理解最后的josef方法.

package com.ebiz.list.josepfu;/*** @author YHj* @create 2019-07-17 22:16* 环形单项链表*/
public class SingleCircleList {//创建一个first 节点 没有编号也可以为空private  Boy firstBoy =new Boy(-1);//添加节点,构成环形链表   需要注意的是第一个节点需要指向节点本身public  void add(int num){if (num < 1 ){System.out.println("编号不正确");return;}//创建辅助节点Boy temp=null;//添加节点for (int i = 1; i <=num ; i++) {Boy boy = new Boy(i);if (i == 1){ //代表第一个节点firstBoy=boy;firstBoy.setNext(firstBoy);temp=firstBoy;  //辅助接点}else {temp.setNext(boy);boy.setNext(firstBoy);  //这里不能为temp 因为是环形链表,后面逐渐增加的节点的next应该是头节点temp=boy;}}}//遍历环形链表public void list( ){if (firstBoy.getNo() == -1){System.out.println("该环形链表为空!");return;}//定义辅助指针Boy temp=firstBoy;while (true){System.out.println(temp);if (temp.getNext().getNo() == 1){break;}temp=temp.getNext();}}/*josepfu问题的实现根据用户的输入,生成小孩出圈的顺序k:从哪里开始m:数几下num:玩游戏的小孩的数量*/public void josepfu(int k,int m,int num){//数据校验if (k>num || k<1 || m<1 || num<1){System.out.println("参数输入有误");}if(firstBoy.getNo() == -1){System.out.println("链表节点为空!");}//创建辅助指针  帮助小孩完成出圈Boy temp=firstBoy;//循环遍历,将该辅助指针指向最后一个,即firstBoy前一个while (true){if(temp.getNext() == firstBoy){break;}temp=temp.getNext();}// 报数之前.让first 和temp移动到对应位置 在k处报数,让first和temp移动k-1,// 移动到开始报数的孩子身上for (int i = 1; i <=k-1 ; i++) {firstBoy=firstBoy.getNext();temp=temp.getNext();}while (true){if (firstBoy == temp){break;}//开始报数,第k个孩子,即firstBoy当前指向的孩子//报m个数,,从第k个孩子本身报数,所以firstBoy移动m-1次,temp也移动m-1次for (int i = 1; i <=m-1 ; i++) {firstBoy=firstBoy.getNext();temp=temp.getNext();}//上面循环结束时,firstBoy指向要出去的孩子System.out.printf("小孩%d出圈",firstBoy.getNo());//这是将firstBoy指向将要出去的孩子的下一位,并且temp的next指向他firstBoy=firstBoy.getNext();temp.setNext(firstBoy);}System.out.printf("最后留在圈中的小孩编号%d",firstBoy.getNo()); //或者temp
        }}

3. 写一个简单测试类

package com.ebiz.list.josepfu;/*** @author YHj* @create 2019-07-18 9:30*/
public class Test {public static void main(String[] args) {//创建环形链表SingleCircleList circleList = new SingleCircleList();//环形链表添加节点circleList.add(5);//遍历链表
        circleList.list();circleList.josepfu(1,2,5);}
}

 

有不懂的欢迎留言评论!

 

转载于:https://www.cnblogs.com/jiushixihuandaqingtian/p/11224328.html

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

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

相关文章

考研英语核心词汇辨析(黑魔方系列2007版之十二)

revolve, evolve, involverevolve v.旋转&#xff0c;转动。The room began to revolve , then he fainted.屋子开始旋转&#xff0c;然后他就昏倒了。evolve v.发展&#xff0c;演变。Agriculture evolved slowly over thousands of years.几千年来&#xff0c;农业发展得很缓…

[html] HTML为什么要语义化?语义化有什么好处?

[html] HTML为什么要语义化&#xff1f;语义化有什么好处&#xff1f; 1.利于SEO 2.结构与表现分离 3.利于维护个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

C# 淘宝商品微信返利助手开发-(六)返利助手开发(4)如何通过淘口令解析的出来的地址获得返利信息

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

Oracle 大规模 delete,update 操作 注意事项

一. 说明 如果对大表进行大规模的delete 和update&#xff0c;那么可以注意一下如下说明&#xff1a; &#xff08;1&#xff09; 查看执行计划&#xff0c;如果说删除的记录很多&#xff0c;走索引的成本会比全表扫描更大&#xff0c;因为更新数据时还需要做一些约束校验和创…

template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

应网友慕之岩的请求&#xff0c;现提供下Django项目中如何使用自定义标签实现仿CSDN博客的月度归档(如下图所示)。要求按月统计每个月发表的博文篇数, 跳过空白月份&#xff0c;最后结果按发布时间逆序排列。点击每个月份可以看到详细博文列表清单。本文着重讲述如何实现&#…

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写?

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写&#xff1f; autocapitalize"none"个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

javascript的stack overflow

写一个很简单的页面和脚本 1<html>2<head>3<title>fanweixiaos test</title>4<script type"text/javascript">5function onclick() 6{ 7 alert(范维肖); 8} 9</script>10</head>11<body>12<input type"b…

GLSL 小細節

"if-else" statement ""gl_FragColor""變數名稱""算指令數,迴圈的指令數要展開來算,才是真的指令數!!!!!!!!!!!!!!"不能下太多很像有限制.........假如出現無謂的ERROR 要注意這點!!!!!!!!!!!转载于:https://www.cnblogs.com/Gam…

Hibernate中inverse属性与cascade属性

Hibernate集合映射中&#xff0c;经常会使用到"inverse"和"cascade"这两个属性。对于我这样&#xff0c;Hibernate接触不深和语文水平够烂的种种因素&#xff0c;发现这两个属性实在是难以理解&#xff0c;无奈只好将这个两个属性解释工作交给了Google和Ba…

h5 nan_h5页面在不同ios设备上的问题总结

最近在写嵌入到小程序webview的一个h5页面&#xff0c;是一个文章评论的功能&#xff0c;这个过程中&#xff0c;遇到很多兼容性的问题&#xff0c;在不同机型上的表现也很不一致&#xff0c;所以总结了以下这些问题&#xff0c;记录下来&#xff0c;以便以后查看。1、日期问题…

[html] 写一个左中右的满屏布局,左右固定220px,中间自适应并且要优先加载

[html] 写一个左中右的满屏布局&#xff0c;左右固定220px,中间自适应并且要优先加载 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

C# 淘宝商品微信返利助手开发-(七)返利助手开发(5)如何将优惠券地址转为淘口令

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

什么是活动策划5表

昨晚&#xff0c;看了《非你莫属》&#xff0c;黄欢提到活动策划的五表。我以前也没听说过&#xff0c;不过现场她也没说清楚&#xff0c;今在网上查了一下&#xff0c;从一个博客中搬过来&#xff0c;权作一个指导工作的一个知识点吧。 活动流程表&#xff1b; 任务分工表&…

ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理

FTP、FTPS 与 SFTP 简介FTPFTP 即 文件传输协议&#xff08;英语&#xff1a;File Transfer Protocol 的缩写&#xff09;是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议。完整的 FTP 是由 FTP 服务器 和 FTP 客户端组成的&#xff0c;客户端可以将本地的…

动手学servlet(四) cookie和session

Cookie cookie是保存在客户端的一个“键值对”&#xff0c;用来存储用户的一些信息 cookie的应用&#xff1a; -在电子商务会话中标识用户 -对网站进行定制&#xff0c;比如你经常浏览哪些内容&#xff0c;就展示哪些页面给你 -网站广告&#xff0c;比如百度联盟&#xff0c;你…

[html] html标签中的lang属性有什么作用?

[html] html标签中的lang属性有什么作用&#xff1f; 根据lang属性来设定不同语言的css样式&#xff0c;或者字体告诉搜索引擎做精确的识别让语法检查程序做语言识别帮助翻译工具做识别帮助网页阅读程序做识别等等个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识…

【C++ 学习笔记】:STL-map

查找 map<int,int>map_test;map_test.insert(pair<int,int>(1,2));map_test.insert(pair<int,int>(1,3));map_test.insert(pair<int,int>(2,2));inta map_test[1];intb map_test[3];map<int,int>::iterator p map_test.find(4);if(p map_test.en…

[html] 说说base标签有什么作用?

[html] 说说base标签有什么作用&#xff1f; base标签为页面上的所有链接规定默认地址. 例如<head> <base href"http://h-camel.com/show/" /> </head>//略过其中结构<a href"2679.html">说说base标签有什么作用</a>个人简…

16进制 转为图片 php_Python 十六进制hex-bytes-str之间的转换和Bcc码的生成

前言近期做测试模拟器用到了hex-bytes-str之间的转换bcc码的校验&#xff0c;这里总结了一些方法。实例直接上代码转为十六进制&#xff08;Hex&#xff09;字符串def 执行代码&#xff1a;方法&#xff1a;getStringFromNumber(size,value)参数一为生成几个batys&#xff0c;参…

C# 淘宝商品微信返利助手开发-(四)返利助手开发(2)淘宝分享的内容如何只取淘口令

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…