#include<iostream>
using namespace std;
typedef struct Node
{
char data;
struct Node *next;
}Node,*LinkList;
int main()
{
char ch;
cin>>ch;
LinkList L;//定义一个链表
L=(Node*)malloc(sizeof(Node));//申请结点空间
L->data=ch;//L是第一个节点
//如果定义L-〉next=NULL则表示有头结点,头结点的指针域为L,L-〉next表示的下一个即第一个结点
Node *r;//尾指针
r=L;
Node *s;
int n=0;//记录总人数
while(true)
{
cin>>ch;
if(ch=='@')
{
break;
}
s=(Node*)malloc(sizeof(Node));//申请新结点
s->data=ch;
r->next=s;//尾插法
r=s;
n++;
}
r->next=L;//指向第一个结点,建立循环
Node *p;
p=L;//p指向下一个节点
int k=0;//记录退出的人数
int x;
int y;//报到第几个开始自杀
cout<<"输入从第几个人开始报数:";
cin>>x;
cout<<"输入报到多少开始自杀:"<<endl;
cin>>y;//
for(int i=1;i<x;i++)
{
p=p->next;//找到从谁开始了
}
cout<<"自杀顺序为:"<<endl;
while(k<=n)
{
for(int j=1;j<y-1;j++)//找到要报数的前一个
{
p=p->next;
}
cout<<p->next->data<<" ";//输出报到那个数的人
p->next=p->next->next;//自杀,删除这个人
p=p->next;//指针继续下移一个,从下一个开始重新报数
k++;//删除人数加1
}
return 0;
}
约瑟夫环单链表解决(详细注释)
最新推荐文章于 2024-09-19 16:56:56 发布