package linkedlist; public class Josepfu { public static void main(String[] args) { //构建环形链表 CircleSinglelinkedList circleSinglelinkedList = new CircleSinglelinkedList(); circleSinglelinkedList.addBoy(5); // circleSinglelinkedList.showBoy(); circleSinglelinkedList.outBoy(1, 2, 5); } } //创建环形单向链表 class CircleSinglelinkedList{ //第一个小孩 private Boy first=new Boy(0); //添加小孩节点构成环形链表 public void addBoy(int nums){ //数据校验 if (nums<1){ System.out.println("至少需要一个节点nums值不正确"); return; } Boy curBoy=null;//辅助指针 //创建环形链表 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){ System.out.println("遍历完毕"); break; } curBoy=curBoy.getNext(); } } public void outBoy(int startNo,int countNum,int nums){ if (startNo<1||countNum>nums||countNum<1){ System.out.println("输入数据不符合要求,请重新输入"); return; } Boy helper=first;//创建和helper指针 //保证helper的下一个节点是first while (true){ if (helper.getNext()==first){ break; } helper=helper.getNext(); } //通过数的次数-1找到最后找到开始数的地方 for (int j=0;j欢迎分享,转载请注明来源:内存溢出
Java数据结构与算法 (约瑟夫环问题 )(单向环形链表)
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
期末保命篇之java判断题
上一篇
2022-12-15
Redis搭建主从复制实现高可用
下一篇
2022-12-15
评论列表(0条)