• c语言练习93:环形链表的约瑟夫问题


    环形链表的约瑟夫问题

    环形链表的约瑟夫问题_牛客题霸_牛客网

    描述

    编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。

    下一个人继续从 1 开始报数。

    n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?

    示例1

    输入:

    5,2

    返回值:

    3

    说明:

    开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开
    1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开
    1,3,5,从5开始报数,5->1,1->2编号为1的人离开
    3,5,从3开始报数,3->1,5->2编号为5的人离开
    最后留下人的编号是3      

    示例2

    输入:

    1,1

    返回值:

    1

    代码:

    1. /**
    2. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    3. *
    4. *
    5. * @param n int整型
    6. * @param m int整型
    7. * @return int整型
    8. */
    9. #include
    10. #include
    11. typedef struct ListNode ListNode ;
    12. //创建结点
    13. ListNode* ListBuyNode(int x) {
    14. ListNode* node = (ListNode*)malloc(sizeof(ListNode));
    15. if (node == NULL) {
    16. perror("malloc fail!");
    17. exit(1);
    18. }
    19. node->val = x;
    20. node->next = NULL;
    21. return node;
    22. }
    23. //创建带环链表
    24. ListNode* CreatList(int n) {
    25. //创建链表
    26. ListNode* phead = ListBuyNode(1);
    27. ListNode* ptail = phead;
    28. int i = 2;
    29. for (i = 2; i <= n; i++) {
    30. ListNode* node = ListBuyNode(i);
    31. ptail->next = node;
    32. ptail = ptail->next;
    33. }
    34. ptail->next = phead;
    35. return ptail;
    36. }
    37. int ysf(int n, int m ) {
    38. // write code here
    39. int count = 1;
    40. //刚开始的时候cur已经走到了套,头结点也会报数,所以count应该置为1
    41. //创建不带头的单向循环链表
    42. ListNode* prev = CreatList(n);
    43. //对链表进行约瑟夫游戏
    44. ListNode* cur = prev->next; //就是头结点
    45. while (cur->next != cur) {
    46. if (count == m) {
    47. prev->next = cur->next;
    48. free(cur);
    49. cur = NULL;
    50. cur = prev->next;
    51. count = 1;
    52. } else {
    53. prev = cur;
    54. cur = cur->next;
    55. count++;
    56. }
    57. }
    58. return cur->val;
    59. }

     野指针

    野指针是指没有指向有效内存位置的一个指针在作删除或释放对象的操作的时候,如果没有即时将指针的值置为NULL,或者有其他的有效内存地址的一个重新指向,那指针仍然指向之前释放后内存的存储位置,其就是野指针.

  • 相关阅读:
    探索arkui(2)--- 布局(列表)--- 2(支持分组/实现响应滚动位置)
    这才是使用ps命令的正确姿势
    C语言基础篇 —— 4.3 结构体详解
    C++ STL库 map
    【java8】静态方法与默认方法
    C# SolidWorks 二次开发 API-Solidworks文件关系与打开文件的方式
    windows ubuntu 子系统:肿瘤全外篇,2. fq 数据质控,比对。
    web初识
    C#中烦人的Null值判断竟然这样就被消灭了
    无人机 PX4 飞控 | EKF2简介与使用方法
  • 原文地址:https://blog.csdn.net/2301_77479435/article/details/133914313