• java单向循环链表(含约瑟夫问题代码展示)


    一:循环链表的思想

    问题:

    思想:如果是第一个结点,自己指向自己,如果结点数不止一个的话的话那么就需要一个辅助结点来判断此时结点到了哪里(类似于之前的temp标记),就是找到链表的在最后一个结点,还需要first始终标记第一个结点。

     

    二:环形链表的搭建

    first标记第一个节点,temp标记最后一个节点(3个必须结点)

    1. public void addBoy(int num) {
    2. if(num < 1) {
    3. System.out.print("数据不正确");
    4. return;
    5. }
    6. //创建第一个结点的标记
    7. Boy first = new Boy(-1);
    8. //创建最后一个结点的标记
    9. Boy temp = null;
    10. for(int i = 1; i <= num; i++) {
    11. Boy boy = new Boy(i);
    12. if(i == 1) {
    13. first = boy;
    14. first.setNext(first);
    15. temp = first;
    16. }else {
    17. temp.setNext(boy);
    18. boy.setNext(first);
    19. temp = boy;
    20. }
    21. }
    22. }

    三:查看循环链表

    和单向链表不同,没有空的头结点

    1. //查看循环链表
    2. public void showBoy() {
    3. if(first == null) {
    4. System.out.print("空链表");
    5. return;
    6. }
    7. Boy boy = first;
    8. while(true) {
    9. System.out.printf("小孩子的编号%d\n" + boy.getNo());
    10. if(boy.getNext() == first) {
    11. break;
    12. }
    13. boy = boy.getNext();
    14. }
    15. }

    四:约瑟夫环问题解决

    约瑟夫环:寻找起始位置->寻找符合步数的结点->出链表(两个必须结点)

    1. public void countBoy(int startno, int countnum, int num) {
    2. if(first == null || startno < 1 || startno > num) {
    3. System.out.print("有问题");
    4. return;
    5. }
    6. Boy helper = first;
    7. while(true) {
    8. if(helper.getNext() == first) {
    9. break;
    10. }
    11. helper = helper.getNext();
    12. }
    13. //寻找起始位置
    14. for(int j = 0; j < startno - 1; j++) {
    15. first = first.getNext();
    16. helper = helper.getNext();
    17. }
    18. //找到出列的那个孩子
    19. while(true) {
    20. if(first == helper) {
    21. break;
    22. }
    23. for(int j = 0; j < countnum - 1; j++) {
    24. first = first.getNext();
    25. helper = helper.getNext();
    26. }
    27. System.out.printf("小孩子%d出列\n",first.getNo());
    28. first = first.getNext();
    29. helper.setNext(first);
    30. }
    31. System.out.printf("最后一个孩子%d出列\n", first.getNo());
    32. }

    结果:

     

  • 相关阅读:
    java服务配置开机自动重启
    浏览器页面性能分析指南(chrome)
    FPGA project : beep
    【开源电路】ST-LINK/V2、ST-LINK/V2-1、DAP-LINK烧录器(已验证)
    5.3-5.4二分搜索算法实例
    荣幸地成为2022-2023年度中国第一个login的Oracle ACE
    [U3D ShaderGraph] 全面学习ShaderGraph节点 | 第三课 | Input/Gradient
    nginx搭建简单负载均衡demo(springboot)
    当前视频分析【video analytics】都有哪些痛点?为什么难以落地?
    计算机毕业设计(附源码)python在线学习系统
  • 原文地址:https://blog.csdn.net/qq_56127002/article/details/126329335