丢手帕问题(环形链表)---Java 待优化
2016-03-31 20:09
453 查看
/** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub CycLink cycLink = new CycLink(); cycLink.setLen(5); cycLink.createLink(); cycLink.setK(2); cycLink.setM(2); //cycLink.show(); cycLink.play(); } } //节点 class Child{ int no; Child nextChild = null; public Child(int no) { //给一个编号 this.no = no; } } //环形链表 class CycLink{ //先定义一个指向链表第一个小孩的引用 //指向第一个小孩的引用,不能动 Child firstChild = null; Child temp = null; //表示链表的大小,共有几个小孩 int len = 0; int k = 0; int m = 0; //设置m 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 > 0) { //2.先数m下 for (int j = 1; j < m; j++) { temp = temp.nextChild; } //找到要出圈的前一个小孩 Child temp2 = temp; while (temp2.nextChild != temp) { temp2 = temp2.nextChild; } //3.将数到m的小孩,退出圈 temp2.nextChild = temp.nextChild; //让temp指向下一个数数的小孩 temp = temp2.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 >= 2 && i != len){ //继续创建小孩 Child ch = new Child(i); temp.nextChild = ch; temp = ch; } else if(i == len) { Child ch = new Child(i); temp.nextChild = ch; temp = ch; temp.nextChild = firstChild; } } } //打印该环形链表 public void show() { //定义一个跑龙套的 Child temp = this.firstChild; do{ System.out.println(temp.no+" "); temp = temp.nextChild; }while(temp != firstChild); } }
相关文章推荐
- java反射机制
- (Java)用递归算法实现斐波那契数列
- java学习笔记-面向对象(二)
- 2016年蓝桥杯javaB省赛——压缩变换
- Java基础--类变量初始化顺序
- Java集合框架
- java--静态变量,静态方法和静态类
- 学习javaEE每一天2016.3.31
- zeroMQ 简单的PUB-SUB 高性能模式,java 语言版本
- java学习第四天
- 求解——spring+Hibernate中Dao内的方法执行到Session session=getSession();后停止运行
- transient
- Java HashMap的工作原理
- java class遍历属性
- java线程的生命周期
- 获取缓冲区内容与将缓冲区内容返回—Java card开发第一篇
- spring security 4. Security Namespace Configuration
- Java正则表达式--网页爬虫
- Java正则表达式测试用例
- java学习笔记-面向对象(一)