当前位置:首页 > 编程笔记 > 正文
已解决

NowCoder | 环形链表的约瑟夫问题

来自网友在路上 173873提问 提问时间:2023-11-09 03:06:03阅读次数: 73

最佳答案 问答题库738位专家为你答疑解惑

NowCoder | 环形链表的约瑟夫问题

OJ链接

在这里插入图片描述
思路:

  • 创建带环链表
  • 带环链表的删除节点

代码如下:

#include<stdlib.h>typedef struct ListNode ListNode;
ListNode* ListBuyNode(int x)
{ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->val = x;node->next = NULL;return node;
}
//创建带环链表
ListNode* CreateList(int n)
{ListNode* phead = ListBuyNode(1);ListNode* ptail = phead;for (int i = 2; i<=n; i++) {ListNode* node = ListBuyNode(i);ptail->next = node;ptail = ptail->next;}//以上只是创建单链表//将首尾相连ptail->next = phead;//有尾结点就能找到头结点return ptail;
}int ysf(int n, int m ) {// write code here//不带头带环单向循环链表ListNode* prev = CreateList(n);//对改链表进行游戏ListNode* cur = prev->next;int count = 1;//报数while(cur->next!=cur){if(count == m){//删除节点prev->next = cur->next;free(cur);cur = prev->next;count = 1;}else{//继续报数prev = cur;cur = cur->next;count++;}}//此时链表就剩下一个节点了return cur->val;
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"NowCoder | 环形链表的约瑟夫问题":http://eshow365.cn/6-35809-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!