返回顶部
首页 > 资讯 > 后端开发 > Python >Java使用单链表实现约瑟夫环
  • 946
分享到

Java使用单链表实现约瑟夫环

2024-04-02 19:04:59 946人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了Java使用单链表实现约瑟夫环的具体代码,供大家参考,具体内容如下 构建一个单向的环形链表思路 1.先创建第一个节点, 让first指向该节点, 并形成环形 2.

本文实例为大家分享了Java使用单链表实现约瑟夫环的具体代码,供大家参考,具体内容如下

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

1.先创建第一个节点, 让first指向该节点, 并形成环形
2.后面当我们每创建一个新的节点, 就把该节点加入到已有的环形链表中即可.

遍历环形链表思路

1.先让一个辅助指针(变量)curBoy, 指向first节点
2.然后通过一个while循环遍历该环形链表即可 curBoy.next == first 结束

生成小孩出圈顺序的思路

1.根据用户的输入, 生成一个小孩出圈的顺序

n = 5, 即有 5 个人
k = 1, 即从第1个人开始数数
m =2, 每次进行数两下

2.需求创建一个辅助指针(变量)helper, 事先应该指向环形链表的最后这个节点

3.在小孩报数前, 让first 指针和 helper指针分别指向正确的位置, 即需要移动 k-1次

4.在小孩报数时, 每次让first指针和helper指针移动 m-1次

5.此时 first指针 指向的节点就是出圈的节点

代码实现


first = frist.getNext();
helper.next = first;

由于first指向的节点数就没有任何引用, 就会被回收


package com.beyond.linkedlist;

import org.omg.CORBA.PUBLIC_MEMBER;

public class Josepfu {
 public static void main(String[] args){
  CircleSingleLinkedList name = new CircleSingleLinkedList();
  name.addBoy(5);
  name.showBoy();
  name.countBoy(1, 2, 5);
 }

}

//创建一个环形的单向链表
class CircleSingleLinkedList {
 // 创建一个first节点,当前没有编号的
 private Boy first = new Boy(-1);

 // 添加小孩节点,构成一个环形的链表
 public void addBoy(int 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;
   } 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.printf("小孩的编号%d \n", curBoy.getNo());
   if (curBoy.getNext() == first) {
    break;
   }
   curBoy = curBoy.getNext(); // 后移
  }
 }

 // 根据用户的输入,计算出小孩出圈的顺序
 
 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) {
    break;
   }
   helper = helper.getNext();
  }

  //小孩报数前,将指针移动到各自开始的位置,移动 k-1 次
  for (int i = 0; i < startNo-1; i++) {
   first = first.getNext();
   helper = helper.getNext();
  }
  
  //当小孩报数时, 让first 和 helper 指针同时移动 m-1次, 然后出圈
  //这是一个循环操作,直到圈中只剩下一个小孩为止
  while (true) {
   if (helper == first) {
    break;
   }
   for (int i = 0; i < countNum-1; i++) {
    first = first.getNext();
    helper = helper.getNext();
   }
   System.out.printf("小孩%d出圈!\n",first.getNo());
   first = first.getNext();
   helper.setNext(first);
  }
  System.out.printf("最后留在圈中的小孩编号为:%d",first.getNo());
 }

}

//先创建一个Boy类, 表示一个节点
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;
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Java使用单链表实现约瑟夫环

本文链接: https://lsjlt.com/news/155782.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java使用单链表实现约瑟夫环
    本文实例为大家分享了Java使用单链表实现约瑟夫环的具体代码,供大家参考,具体内容如下 构建一个单向的环形链表思路 1.先创建第一个节点, 让first指向该节点, 并形成环形 2....
    99+
    2024-04-02
  • C++实现约瑟夫环的循环单链表
    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。. 从编号为 k 的人开始报数,数到 m 的那个人出圈;他的下一个人...
    99+
    2024-04-02
  • C语言用循环单链表实现约瑟夫环
    用循环单链表实现约瑟夫环(c语言),供大家参考,具体内容如下 源代码如下,采用Dev编译通过,成功运行,默认数到三出局。 主函数: main.c文件 #include <s...
    99+
    2024-04-02
  • 【链表问题】环形单链表约瑟夫问题
    前言以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获。每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢【题目描述】【要求】输入:一个环形单向链表的头节点 head 和报数 m.返回:最后...
    99+
    2023-06-02
  • javascript循环链表之如何实现约瑟夫环
    小编给大家分享一下javascript循环链表之如何实现约瑟夫环,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码如下:var node = this.hea...
    99+
    2024-04-02
  • Java用单向环形链表来解决约瑟夫环Josepfu问题
    简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点。 单向环形链表应用场景:Josephu(约瑟...
    99+
    2024-04-02
  • 约瑟夫环 python 实现
    面试的过程中遇到了这个问题。就是经典的约瑟夫环。总共有41个人,排成一排,数到3的人自杀,问最后剩下的是那两个号码? 这个题目最早是用指针实现的。在我面试python的过程中遇到了,我嫌麻烦,所以只写了伪代码。后来想来一下,这样实在是表现...
    99+
    2023-01-31
    约瑟夫 python
  • Java简单实现约瑟夫环算法示例
    本文实例讲述了Java简单实现约瑟夫环算法。分享给大家供大家参考,具体如下:1.算法背景:罗马人攻占了乔塔帕特,41人藏在一个山洞中躲过了这场浩劫。这41个人中,包括历史学家josephus和他的一个朋友。剩余的39个人为了表示不向罗马人屈...
    99+
    2023-05-31
    java 约瑟夫环 算法
  • Java中怎么实现一个约瑟夫环
    今天就跟大家聊聊有关Java中怎么实现一个约瑟夫环,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是约瑟夫环呢?约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分...
    99+
    2023-06-17
  • C++约瑟夫环问题怎么实现
    本文小编为大家详细介绍“C++约瑟夫环问题怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++约瑟夫环问题怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。题目如下:有一家公司,这个公司有一位老板和...
    99+
    2023-06-26
  • Python实现约瑟夫环问题的方法
    本文实例讲述了Python实现约瑟夫环问题的方法。分享给大家供大家参考,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一...
    99+
    2022-06-04
    约瑟夫 方法 Python
  • C语言如何实现一个约瑟夫环
    本篇内容主要讲解“C语言如何实现一个约瑟夫环”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现一个约瑟夫环”吧!C语言约瑟夫环的实现一、典故:   &nb...
    99+
    2023-06-17
  • Java数据结构与算法之双向链表、环形链表及约瑟夫问题深入理解
    目录一、双向链表二、环形链表及其应用:约瑟夫问题环形链表图示构建一个单向的环形链表思路遍历环形链表约瑟夫问题一、双向链表 使用带head头的双向链表实现 - 水浒英雄排行榜管理单向链...
    99+
    2024-04-02
  • 如何使用批处理解约瑟夫环应用题
    小编给大家分享一下如何使用批处理解约瑟夫环应用题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目:   有二十九个女生(分别用1-29号来称呼)围成一圈玩报数游...
    99+
    2023-06-08
  • 详解基于C++实现约瑟夫环问题的三种解法
    目录一、前言二、循环链表模拟三、有序集合模拟四、递归公式解决五、结语一、前言 什么是约瑟夫环问题? 约瑟夫环问题在不同平台被"优化"描述的不一样,例如在牛客剑指offer叫孩子们的游...
    99+
    2024-04-02
  • Java如何实现一个单向非循环链表
    这篇文章主要介绍“Java如何实现一个单向非循环链表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何实现一个单向非循环链表”文章能帮助大家解决问题。1、什么是链表?链表是一种物理存储结构上...
    99+
    2023-07-04
  • java单链表使用总结
    链表的概念: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中的每一个元素称为节点)组成,节点可以在运行...
    99+
    2024-04-02
  • Java实现单链表的操作
    本文实例为大家分享了Java实现单链表的基本操作,供大家参考,具体内容如下 顺序表:物理上逻辑上都连续;链表:物理上不一定连续,逻辑上一定连续的。 链表的概念及结构 概念:连表示一种...
    99+
    2024-04-02
  • Node.js环境下JavaScript实现单链表与双链表结构
    单链表(LinkedList)的javascript实现 npmjs相关库: complex-list、smart-list、singly-linked-list 编程思路: add方法用于将元素追加...
    99+
    2022-06-04
    链表 结构 环境
  • C++实现LeetCode(141.单链表中的环)
    [LeetCode] 141. Linked List Cycle 单链表中的环 Given a linked list, determine if it has a cycle i...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作