[高手赐教]约瑟夫有关问题:为什么小弟我的循环链表不能生成

[高手赐教]约瑟夫问题:为什么我的循环链表不能生成
#include <iostream.h>
template <class   T> class   circlist;
template <class   T> class   circlistnode{
friend   class   circlist <T> ;
public:
        circlistnode(T   d,circlistnode <T>   *   l):data(d),link(l){}
circlistnode(T   d):data(d),link(NULL){}
private:
T   data;
circlistnode <T> *link;
};

template <class   T> class   circlist{
public:
circlist(T   value){first=new   circlistnode <T> (value);last=first=first-> link;current=NULL;}

void   firster(){current=first-> link;}
void   insert(T   &   value);
void   remove();
void   prior();
void   next();
T   getdata();
void   J(int   n,int   m);
private:
circlistnode   <T>   *first,*current,*last,*priorer;
};

template <class   T> void   circlist <T> ::insert(T   &   value){
if(current==NULL)                                                                                       //原表为空
current=first-> link=new   circlistnode <T> (value,first);       //     <T> !!!!
else
{current-> link=new   circlistnode <T> (value,current-> link);               //not   first
  current=current-> link;
}
last=current;
}

template <class   T> void   circlist <T> ::remove(){
if(current!=NULL){
circlistnode <T> *tempptr=current;
current=current-> link;
priorer-> link=current;
delete   tempptr;
if(current==first){
last=priorer;
current=current-> link;
}
}
}

template <class   T> void   circlist <T> ::prior(){
        priorer=current;
}

template <class   T> void   circlist <T> ::next(){
current=current-> link;
if(current==first)   current=current-> link;
}

template <class   T> T   circlist <T> ::getdata(){
return   current-> data;
}

template <class   T> void   circlist <T> ::J(int   n,int   m){
firster();
for(int   i=0;i <n-1;i++){
for(int   j=0;j <m-1;j++){
next();
if(j==m-2)   prior();
}
cout < < "delete   person " < <getdata() < <endl;
remove();
}
}

void   main(){
circlist   <int>   clist(0);
int   n,m;

cout < < "请分别输入人数和报数数 " < <endl;
cin> > n> > m;
cout < < "请输入链表值 " < <endl;
for(int   i=1;i <=n;i++){
       
          clist.insert(i);
}
clist.J(n,m);
}


------解决方案--------------------
template <class T> class circlist{
public:
circlist(T value){first=new circlistnode <T> (value);last=first=first-> link;current=NULL;}

last=first=first-> link;改为 last=first-> link=first;即可生成循环链表