
程序代码:
#include <iostream>
using namespace std;
template <class T>
class Node
{
public:
T element;
Node<T> *link;
Node(T elem=0,Node<T>* lk=0):element(elem),link(lk)
{}
template <class T> friend void Josephus(Node<T>*& first, int m);
};
template <class T>
void Josephus(Node<T>*& first, int m)
{
Node<T> *q=first,*p=first;
while(p&&p!=p->link)
{
for(int i=1;i<m;q=p,p=p->link)
i++;
cout<<p->element<<" ";
q->link=p->link;
delete p;p=q->link;
}
if(p)
{
cout<<p->element<<" ";
delete p;
}
first=NULL;
}
int main()
{
int s,n;
cout<<"请输入人数:";
cin>>n;
cout<<"请输入间隔:";
cin>>s;
Node<int> *u=new Node<int>(1,0);
u->link=u; //构成循环链表
Node<int> *q=u;
for(int i=2;i<=n;i++)
{
q->link=new Node<int>(i,q->link);
q=q->link;
}
Josephus(u,s);
cout<<endl;
}