💖💖💖欢迎来到我的博客,我是anmory💖💖💖
又和大家见面了
欢迎来到动画详解LeetCode算法系列
用通俗易懂的动画让算法题不再神秘
先来自我推荐一波
个人网站欢迎访问以及捐款
推荐阅读
如何低成本搭建个人网站
专栏:动画详解leetcode算法题
C语言知识
题目描述
解题思路
通过一个循环单链表来实现报数并删除的功能
动画详解
代码实现
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param m int整型
* @return int整型
*/
typedef struct ListNode LN;
LN* BuyNode(int x)
{
LN* new = (LN*)malloc(sizeof(LN));
if(new == NULL)
{
perror("malloc fail");
exit(1);
}
new->val = x;
new->next = NULL;
return new;
}
LN* LNCreate(int n)
{
// 先创建一个节点
BuyNode(1);
LN* phead = BuyNode(1);
LN* ptail = phead;
// 再创建剩下的
for(int i = 2; i<=n; i++)
{
BuyNode(i);
ptail->next = BuyNode(i);
ptail = ptail->next;
}
// 首尾相连形成环形链表
ptail->next = phead;
return ptail;// 注意return ptail
}
int ysf(int n, int m ) {
// write code here
LNCreate(n);
LN* prev = LNCreate(n);
LN* pcur = prev->next;
int count = 1;
while(pcur!=pcur->next)
{
if(count == m)
{
prev->next = pcur->next;
pcur = prev->next;
count = 1;
}
else {
{
prev = prev->next;
pcur = pcur->next;
count++;
}
}
}
return pcur->val;
}
总结
💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你手撕算法题
下期再见