环形链表

实例:使用环形链表解决约瑟夫问题(丢手绢)

构建一个单向环形链表思路

​ 1)先创建第一个节点,让first指向该节点,并形成环形

​ 2)加入环形链表

遍历环形链表

​ 1)先让一个辅助指针,指向first节点

​ 2)while循环遍历环形链表

package com.cwnu.linkList.link;import com.cwnu.linkList.node.Node;//创建环形的单向链表
public class Josepfu {//创建一个first节点,无编号节点private Node first = null;private int Number;//添加小孩节点,构建环形链表public void addBoy(int number) {//添加多少个节点this.Number = number;//number做一个数据校验if (number < 1) {System.out.println("数据无效");return;}//辅助变量,帮助其构建环形链表Node temp = null;//for循环添加环形链表for (int i = 1; i <= number; i++) {//根据变量添加节点Node boy = new Node(i);if (i == 1) {first = boy;first.setNext(first);temp = first;//辅助指针指向first} else {temp.next = boy;boy.next = first;temp = temp.next;}}}//遍历环形链表public void showBoy() {//判断链表是否为空if (first == null) {System.out.println("链表为空");return;}Node temp = first;while (true) {System.out.printf("小孩的编号%d \n", temp.getNo());if (temp.getNext() == first) {//说明遍历完毕break;}temp = temp.next;}}//根据用户的输入,计算出小孩出圈顺序/*** @param startNo  表示开始报数小孩的number* @param countNum 报多少次数*/public void countBoy(int startNo, int countNum) {if (first == null || startNo < 1 || startNo > Number) {System.out.println("参数输入有误");return;}//创建辅助指针,帮助出圈,让其指向循环链表的最后节点Node temp = first;while (true) {if (temp.getNext() == first) {break;}temp = temp.next;}//初始化first节点和temp节点,将其指向用户输入的开始节点和开始前一个节点for (int i = 0; i < startNo - 1; i++) {first = first.next;temp = temp.next;}while (true) {if (first.next == temp.next){//最后一个同学System.out.printf("出列编号为%d", first.getNo());break;}for (int i = 0; i < countNum - 1; i++) {first = first.next;temp = temp.next;}//此时first辅助节点指向的就是出列节点temp.next = first.next;System.out.printf("出列编号为%d\t", first.getNo());first = first.next;}}
}

Java数据结构单向循环链表实现约瑟夫问题(丢手绢)相关推荐

  1. Java中使用链表解决约瑟夫问题(丢手绢问题)

    文章目录 文章目录 前言 一.思路分析 二.代码实现 1.Chird类建立 2.链表创建 3.功能实现 总结 其他解决方式: Java中使用list解决约瑟夫问题https://blog.csdn.n ...

  2. Java中使用list解决约瑟夫问题(丢手绢问题)

    文章目录 文章目录 前言 一.思路分析 二.代码实现 总结 其他解决方式: Java中使用环形链表解决约瑟夫问题https://blog.csdn.net/qq_35813811/article/de ...

  3. c语言循环链表约瑟夫问题的时间复杂度,用单向循环链表解决约瑟夫问题算法优劣性分析.doc...

    用单向循环链表解决约瑟夫问题算法优劣性分析 用单向循环链表解决约瑟夫问题算法优劣性分析 摘要: 首先由简单问题引入约瑟夫问题,然后用单向循环链表解决约瑟夫问题,最后对模拟方法及数学方法的优劣性进行分析 ...

  4. 数据结构与算法: 约瑟夫问题(丢手绢)

    数据结构与算法: 约瑟夫(丢手绢)问题(单向链表,双向链表解决) Tips: 采用java语言, 关注博主,底部附有完整代码 采用到的知识点: 单向环形链表 双向环形链表 单向 / 双向 环形链表出圈 ...

  5. 数据结构-单向循环链表、双向循环链表、仿真链表

    一.单向循环链表: 1.概念: 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环. 和单链表相比,循环单链表的 ...

  6. python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码

    /************************************************************************* > File Name: JosephCir ...

  7. 数据结构与算法--我们来玩丢手绢(约瑟夫环问题)

    我们来玩丢手绢 昨天我们打扑克,今天我们丢手绢 丢手绢我们都知道这个游戏,他的由来由约瑟夫 (Josephus)提出来的 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,3 ...

  8. 【循环链表】数据结构——单向循环链表和双向循环链表操作笔记

    循环链表 一.单向循环链表 1.单向循环链表的节点 2.单向循环链表的结构 二.双向循环链表 1.双向循环链表示意图 2.双向循环链表节点设计 3.双向循环链表的一般性结构 4.双向循环链表头插法插入 ...

  9. 约瑟夫环 -- 丢手绢问题

    问题描述 约瑟夫环问题,也称为"丢手绢问题". 编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3-这样依次报),数到 m 的 士兵 ...

最新文章

  1. 关于微信公众号注意事项
  2. linux中sudo如何读取标准输入作为密码,避免每次都输入密码?
  3. UI复习练习_优酷布局
  4. cmd中如何查看当前绝对路径_如何查看 Linux 中文件打开情况?
  5. 笔记本电脑清洁小记(附螺丝滑丝处理,常见意外情况)
  6. linux zip包解压乱码
  7. 苹果:App Store中国区无版号游戏8月1日起下架;美国计划打造量子互联网;HHVM 4.67 发布 | 极客头条...
  8. Docker 大势已去,Podman 崛起
  9. 在服务中mysql启动不了了_mysql在服务项里无法启动
  10. c语言经典题(期中/期末复习)(xdoj)
  11. 构建数据指标预警系统
  12. react-dnd官方文档
  13. (vcom-1141) Identifier “<protected>“ does not identify a component declaration.
  14. mysql 行转列查询优化_行转列及列转行查询
  15. 2021年电工(初级)考试报名及电工(初级)免费试题
  16. Ubuntu14.04安装有道词典
  17. SQL SERVER2008局域网内连不上问题
  18. 怎么锻炼孩子的想象力创造力_家长培养孩子想象力创造力的训练游戏
  19. 掌握模拟电路设计需要阅读的几本参考书!
  20. c# 时间格式化为英文_C#中如何将日期中的月份转化成英文

热门文章

  1. 从小镇到北大!再到阿里达摩院,「AI萝莉」的“升级打怪”之路...
  2. DeFi基本概念-开发人员必看
  3. 仿乐享微信源码分享,微信管家升级版最新版本
  4. LeetCode 576 出界的路经数
  5. python中readlines是什么意思_python中read、readline、readlines之间的区别
  6. UML正日薄西山的13个理由
  7. 羊皮卷-选择的力量(二)
  8. 在OpenStack全球开源社区里,中国力量正在异军突起
  9. ubuntu一键卸载php
  10. 如何从其他平台快速引流到微信?