自定义循环链表实现
#include <iostream>
using namespace std;
struct Node
{
int num;
Node *next;
};
int JosephuProblem(int n, int m)
{
if(n<1 || m<1)
return -1;
Node *head = new Node();
Node *current = head;
for(int i = 1; i<=n; i++)
{
Node *last = new Node;
last->num = i;
current->next = last;
current = last;
}
current->next = head->next;
Node *numlist = head->next;
Node *pre = NULL;
while(numlist != numlist->next)
{
for(int i = 0; i<m-1; i++)
{
pre = numlist;
numlist = numlist->next;
}
cout << numlist->num<<" ,";
numlist = numlist->next;
delete pre->next;
pre->next = numlist;
}
cout<<endl;
return numlist->num;
}
int main()
{
int n, m;
cin>>n>>m;
cout<<JosephuProblem(n, m);
}