#include<iostream>
using namespace std;
struct node
{
int number;
node *next;
};
node *creat(int );
int counts(node *head);
void show(node *head,int m);
int main()
{
int n,m,k;
cout<<"有几个小朋友"<<endl;
cin>>n;
cout<<"几个人一数"<<endl;
cin>>m;
node *head=creat(n);
cout<<"从第几个人开始"<<endl;
cin>>k;
while(--k) head=head->next;
show(head,m);
return 0;
}
node *creat(int num)
{
int i=1;
node *head=new node;
node *p=head;
while(i<=num)
{
p->number=i;
if(i==num)
{
goto tql;
}
p->next=new node;
p=p->next;
i++;
}
tql:
{
p->next=head;
return head;
}
}
int counts(node *head)
{
node *p=head->next;
int i=0;
while(p!=head)
{
i++;
p=p->next;
}
return i+1;
}
void show(node *head,int m)
{
node *p=head;
if(counts(p)==1)
{
cout<<"只有一个学生,他的号码是"<<p->number<<endl;
return ;
}
else
{
node *p1=head,*p2=head;
while(p2->next!=head)
{
p2=p2->next;
}
int i=1;
while(counts(head)!=1)
{
i=1;
while(i<=m-1)
{
p1=p1->next;
p2=p2->next;
i++;
}
cout<<p1->number<<"号小朋友离开"<<endl;
p2->next=p1->next;
if(p1==head)
{
delete p1;
p1=p2->next;
head=p1;
}
else
{
delete p1;
p1=p2->next;
}
}
cout<<"最后留下来的小朋友是"<<p1->number<<"号小朋友"<<endl;
}
}
链表实现约瑟夫环
最新推荐文章于 2023-05-14 18:05:47 发布