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

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

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;
}
相关文章
|
1天前
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
4 0
|
7天前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
7 0
|
7天前
|
Java
环形数组链表(java)
环形数组链表(java)
7 0
|
7天前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
|
27天前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
11 2
|
2月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
26 1
|
2月前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
32 1
|
2月前
|
索引
【力扣刷题】回文链表、环形链表、合并两个有序链表
【力扣刷题】回文链表、环形链表、合并两个有序链表
22 0
|
2月前
|
存储
环形链表题
环形链表题
26 0
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表