• 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,或者有其他的有效内存地址的一个重新指向,那指针仍然指向之前释放后内存的存储位置,其就是野指针.

  • 相关阅读:
    程序员必须了解的 10个免费 Devops 工具
    量子笔记:布尔逻辑/代数、逻辑门、通用门、可逆计算
    基于Mendix移动原生的离线应用
    2023计算机四非保研(复试:东北大学,成电,西电,浙软,中海洋,天大)
    嵌入式工程师面试-常问问题集
    Python字符串操作总结
    MQTT协议------上
    【Flink源码】JobManager启动流程
    yolov5多个框重叠问题
    JDBC基本操作
  • 原文地址:https://blog.csdn.net/2301_77479435/article/details/133914313