问题遇到的现象和发生背景
有M个人围坐成一圈, 编号依次从1开始递增,现从编号为1的人开始报数,报到N的人出列,然后再从下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列。求出列次序。本题要求用循环单链表实现。提示:开始时将循环单链表的指针变量设为空,添加第1人时,将结点的指针域指向自己,后面新添加人员时,将循环单链表的指针变量指向的尾部后添加新结点,并始终将循环单链表的指针变量指向新添加的结点,对应M个人的循环单链表中有M个结点;报数时,报到指定数后输出对应结点里的人员编号,并将该结点从链表中删除。
问题相关代码,请勿粘贴截图
#include<iostream>
#include<iomanip>
using namespace std;
struct Node{
int data;
struct Node*next;
};
void Create_newlist(Node*la,int m);
void Show_number(Node*la,int N);
int main()
{
int M,N,m;
cin>>M>>N;
Node*la=new Node;
la->next=NULL;
m=1;
while(M--)
{Create_newlist(la,m);
m++;}
Show_number(la,N);
return 0;
}
void Create_newlist(Node*la,int m)
{
Node*q=new Node;
q->data=m;
q->next=NULL;
Node*p=la;
if(m==1)
{
la->next=q;
q->next=la->next;
}
else
{
while(--m)
{
p=p->next;
}
p->next=q;
q->next=la->next;
}
}
void Show_number(Node*la,int N)
{
Node*p=la;
Node*q=la;
int i=1;
if(N==1)
cout<<setfill(' ')<<setw(4)<<p->next->data;
else
{
while(la->next)
{
if(i!=N)
{
i++;
p=p->next;
q=p->next;
}
else
{
i=1;
cout<<setfill(' ')<<setw(4)<<p->next->data;
p->next=q->next;
q->next=NULL;
la->next=p;
}
}
}
}
运行结果及报错内容
dev c++和codeblocks无报错且结果正确,但pta平台编译有段错误