2 weixin 33603236 weixin_33603236 于 2016.03.23 00:21 提问

用c++打的约瑟夫环,为什么总是过不了

#include
using namespace std;
template
struct linknode{
T data;
linknode* link;
linknode(T d,linknode* next=NULL):data(d),link(next){}
};
template
class list{
public:
list(T x){
linknode* first=new linknode(x);
first->link=first;
}
~list(){
linknode* q;
q=first->link;
while(q!=first){
first->link=q->link;
delete q;
q=first->link;
}
delete first;
}
linknode* locate(int i);
void insert(int i,T& x);
void remove(int i,T& x);
linknode* first;
linknode* last;
};
template
linknode* list::locate(int i){
linknode* p=first;
if(i==0){
for(int j=1;p->link!=first;j++){
p=p->link;
}
return p;
}
for(int j=1;j<=i;j++){
p=p->link;
if(p==first)
return NULL;
}
return p;
}
template
void list::insert(int i,T& x){
linknode* p=new linknode(x);
linknode* q=locate(i-1);
p->link=q->link;
q->link=p;
}
template
void list::remove(int i,T& x){
linknode* p=locate(i-1);
x=p->link->data;
linknode* q=p->link;
p->link=q->link;
delete q;
}
template
void yuese(list& a,int m,int n){
linknode* p=a.first;
linknode* q;
for(int i=1;i<=n-1;i++){
int count=1;
while(1){
count++;
if(count==m){
q=p->link;
cout<data< if(q==a.first){
a.first=q->link;
}
p->link=q->link;
delete q;
break;
}
p=p->link;
}
}
cout<<"the winner is "<data< }
int main(){
list a(1);
int m,n;
cout<<"请输入m,n的值"< cin>>m>>n;
for(int i=2;i<=n;i++)
a.insert(i,i);
for(int i=1;i<=n;i++){
cout<data<<endl;
}
yuese(a,m,n);
return 0;
}

2个回答

caozhy
caozhy   Ds   Rxr 2016.03.23 07:04
 linknode* first=new linknode(x);
->
first=new linknode<T>(x);

你画蛇添足了,定义了一个局部变量也叫first,导致成员变量的first指针没有赋值。
enpterexpress
enpterexpress   2016.03.23 10:48
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!