#include<iostream>
using namespace std;
struct node
{
int num;
node *next;
}*head,*p,*r,h;
int main()
{
node h;
int N;
head=(node*)malloc(sizeof(node));//或者改成head=&h;
//head->num=1;
p=head;
for(int i=1;i<=5;i++)
{
r=(node*)malloc(sizeof(node));
r->num=i;
p->next=r;
p=r;
//system("pause");
}
p->next=head;
p=head;
for(int i=1;i<=10;i++)
{
p=p->next;
if(p!=head)//头指针没有存数据,所以如果不加这个判断会输出 1 2 3 4 5 地址 1 2 3 4
printf("%d ",p->num);
}
system("pause");
}
输出结果 1 2 3 4 5 1 2 3 4
哈工程寒假集训 STEP--2 约瑟夫环
#include<iostream>
using namespace std;
struct node
{
int num;
node *next;
}*head,*p,*r,*t,h;
int main()
{
node h;
int N,m;
while(scanf("%d%d",&N,&m)!=EOF)
{
head=(node*)malloc(sizeof(node));
//head->num=1;
p=head;
for(int i=1;i<=N;i++)
{
r=(node*)malloc(sizeof(node));
r->num=i;
p->next=r;
p=r;
//system("pause");
}
p->next=head->next;
p=head->next;
while(p->next!=p)
{
for(int i=0;i<m-1;i++)
{
t=p;
p=p->next;
}
t->next=p->next;
p=t->next;
}
printf("%d\n",p->num);
}
}