经典的约瑟夫环
#include <stdint.h>
#include <stdlib.h>
//创建链表
typedef struct ListNode ListNode;
ListNode* buyNode(int x){
ListNode* newNode=(ListNode*)malloc(sizeof(ListNode));
if(newNode==NULL){
exit(1);
}
newNode->val=x;
newNode->next=NULL;
return newNode;
}
//创建新节点
ListNode* createList(int n){
ListNode* phead=buyNode(1);
ListNode* ptail=phead;
for(int i=2;i<=n;i++)
{
ptail->next=buyNode(i);
ptail=ptail->next;
}
ptail->next=phead;
return ptail;//返回ptail,因为需要有前一个指针和后一个指针
}
int ysf(int n, int m ) {
// write code here
ListNode* prev=createList(n);
ListNode* pcur=prev->next;
int count=1;
while(pcur->next!=pcur){
if(count==m){
prev->next=pcur->next;//先让prev指向pcur的next要不然会找不到pcur
free(pcur);
pcur=prev->next;
count=1;//置为1重新计数
}
else{
prev=pcur;
pcur=pcur->next;
count++;