题解 | 环形链表的约瑟夫问题
环形链表的约瑟夫问题
https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a
typedef struct sl{
int num;
struct sl* next;
}sb;
int ysf(int n, int m ) {
//构建环形链表
sb* arr[n];
for(int i=1; i<=n; i++){
arr[i-1]=(sb*)malloc(sizeof(sb));
arr[i-1]->num=i;
}
for(int i=0; i<n; i++){
arr[i]->next = (i != n-1) ? arr[i+1] : arr[0];
}
//开始操作
sb* cur = arr[0];
sb* pre = arr[n-1];
while( pre != cur ){
for(int i=1; i<m; i++){
pre=cur;
cur=cur->next;
}
pre->next = cur->next;
cur=cur->next;
}
return cur->num;
}