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;
}
相关文章
|
4月前
链表9(优化版)7-9 sdut-C语言实验-约瑟夫问题
链表9(优化版)7-9 sdut-C语言实验-约瑟夫问题
21 0
|
4月前
SDUT 链表9-------7-9 sdut-C语言实验-约瑟夫问题
SDUT 链表9-------7-9 sdut-C语言实验-约瑟夫问题
27 0
|
5月前
|
Java
环形数组链表(java)
环形数组链表(java)
|
1月前
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
27 0
|
4月前
【数据结构OJ题】环形链表
力扣题目——环形链表
37 3
【数据结构OJ题】环形链表
|
4月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
30 1
【数据结构OJ题】环形链表II
|
5月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
52 2
|
4月前
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
33 0
|
5月前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
|
5月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题