请大家帮我看一下问什么输出错误
题目一 joseph环(线性表应用)
【问题描述】
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
【实现提示】
可以利用顺序结构或循环链表存储结构模拟此过程。顺序结构可以通过取模运算来完成循环报数。
测试数据:m的初值为4,n=7 ,7个人的密码依次为
3,1,7,2,4,7,4.
输出结果为:
4 6 1 5 7 3 2
以下我的代码
```c++
#include <iostream>
using namespace std;
typedef struct Lnode
{
int code;
int num;
struct Lnode* next;
} Lnode,*Linklist;
void IntList (Linklist& L)
{
L=new Lnode;
L->next=NULL;
}
void CreatList (Linklist& L,int n)
{
Lnode* p;
for(int i=0;i<n;i++)
{
p=new Lnode;
cin>>p->code;
p->num=i+1;
p->next=L->next;
L->next=p;
}
}
bool Listdelete(Linklist& L,int i,int e)
{
Linklist p=L;
Lnode* q;
int j=0;
while (p->next&&j<i-1)
{
p=p->next;
j++;
}
if(!(p->next)||i<1)
{
return false;
}
q=p->next;
p->next=q->next;
e=q->code;
cout<<q->num<<" ";
delete q;
}
void Listdelete(Linklist& L,int i,int n,int r)
{
bool flag;
int e;
flag=Listdelete(L,i,e);
if(flag)
{
r= e;
n--;//删除成功,e为下一次的前进数目
}
}
int main()
{
Linklist L;
IntList ( L);
int n;
cin>>n;
CreatList (L,n);
int k;int e;cin>>k;
while (L->next != L) { // 当链表中只剩下一个节点时结束循环
Listdelete(L, k, n, e);
// 输出被淘汰的学生编号
k = (e + k) % n;
n--; // 学生人数减一
}
cout << L->num;
}