Java环形链表--约瑟夫问题
2017-03-19 21:06
459 查看
n个小孩围成圈,丢手帕,从第start个小孩开始丢,每到第step个小孩出局;接着从下一个小孩开始,直到最后一个小孩为止,游戏结束。
/** * @author Jiaozl * CycLink cyclink = new CycLink(); * cyclink.setLen(5); * cyclink.createLink(); * cyclink.setStart(2); * cyclink.setStep(2); * cyclink.show(); * cyclink.play(); */ public class CycLink { Child firstChild = null; // 指向链表第一个小孩的引用 Child temp=null; int len = 0; // 表示公有几个小孩 int start = 0; int step = 0; /** * 设置链表的大小 */ public void setLen(int len) { this.len = len; } /** * 设置从第几个人开始数数 */ public void setStart(int start) { this.start = start; } /** * 设置step */ public void setStep(int step) { this.step = step; } /** * 开始play */ public void play() { Child temp = this.firstChild; // 先找到开始数数的人 for(int i=1; i<=start-1; i++) { temp = temp.nextChild; } while(this.len!=1) { // 数m下 for (int i = 1; i < step; i++) { temp = temp.nextChild; } Child temp2 = temp; while (temp2.nextChild!=temp) { temp2 = temp2.nextChild; } // 将疏导step的小孩,退出圈圈 temp2.nextChild = temp.nextChild; 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); } } class Child{ int no; Child nextChild = null; public Child(int no) { this.no = no; } }
相关文章推荐
- 环形链表实现约瑟夫问题 java语言
- 使用环形链表解决约瑟夫(丢手帕)问题
- 数据结构与算法分析笔记与总结(java实现)--链表9:有序环形链表中插入新结点问题
- Java采用循环链表结构求解约瑟夫问题
- 环形链表解决约瑟夫游戏问题
- php实现单,双向链表,环形链表解决约瑟夫问题
- 链表问题---环形单链表的约瑟夫问题
- 环形链表+约瑟夫问题实现
- 17.环形链表,以及用环形链表解决约瑟夫问题
- php使用环形链表解决约瑟夫问题完整示例
- java基于双向环形链表解决丢手帕问题的方法示例
- 约瑟夫问题 java解法(双向链表解决)
- 丢手帕问题(环形链表)---Java 待优化
- java链表 约瑟夫问题
- 约瑟夫问题(Josephus)java链表解决
- java学习笔记之链表(约瑟夫问题)
- 约瑟夫问题(单向链表)
- 约瑟夫问题java语言实现代码
- 关于JAVA初学者链表的问题
- 自己用java代码实现的:“约瑟夫”问题