#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{ //定义结构
ElemType data;
ElemType num;
struct LNode *next;
}LNode,*LinkList;
void del(LinkList &L,LinkList p) //删除找到的节点
{
LinkList q;
for(q=L;q->next!=p;q=q->next); //令q指向L,当q的下一个为p时停止,否则q指向q的下一个
q->next=p->next; //找到p,令q指向的节点next指向p的下一个节点
delete p; //释放p的空间
}
int putin(LinkList &L,int e) //按顺序输入密码,
{
LinkList p;
int a;
cout<<"请按顺序输入密码"<<endl;
cin>>a ; //插入第一个数据
LinkList s;
s=new LNode;if(!s)return 0; //获取空间
L=s;s->data=a;s->num=1; //头指针指向空间并赋值
p=L; //辅助指针指向第一个元素
for(int i=1;i<e;i++)
{
cin>>a;
s=new LNode;if(!s)return 0;
p->next=s;p=s; //让p的next指向新的节点,并让p重新指向这个节点
s->data=a;s->num=i+1; //给节点赋值
}
s->next=L; //让节点的next指向头节点
return 0;
}
int getout(LinkList &L,int &f)
{
LinkList p; //定义辅助指针
int i; p=L; //i用来控制循环次数
if(!L)return 0; //判空
for(i=1;i<f;i++) //其它情况
{ p=p->next; } //找到节点
f=p->data; //用f取得密码重新作为报数上限
cout<<p->num<<" "; //输出号码
L=p->next; //将头指针指向找到的元素的下一个
del(L,p); //释放找到的节点的空间
return 0;
}
int main() //主函数
{
LinkList L;
int m,n;
cout<<"请输入报数上限,大于零"<<endl;
cin>>m;cout<<endl;
cout<<"请输入人数"<<endl;
cin>>n;cout<<endl;
if(m<=0||n<=0)return 0;
putin(L,n);
cout<<"结果"<<endl;
for(int i=1;i<=n;i++)
{getout(L,m);}
}