总结了个小经验,有时候光靠看是看不出什么端倪来的,还必须得动下笔,比划比划也许就那么简单
#include
#include
typedef
{
}Node;
Node
{
int
Node
head=(Node*)malloc(sizeof(Node));
p=head;
for(i=2;i<=n;i++)
{
q=(Node*)malloc(sizeof(Node));
p->next=q;
q->data=i;
p=p->next;
}
p->next=head;
return(head);
}
void
{
int
Node
for
p=p->next;
}
void
{
int
Node
printf("请输入总人数n:
scanf("%d",&n);
printf("\n请输入出列者报的数m:
scanf("%d",&m);
printf("\n");
head=CreatList(n);
Joseph(head,n,m);
printf("\n");
printf("\n");
}
自己优化的代码
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
node *next;
};
int m,n;
node *head;
void creat()
{
int i;
node *p,*q;
head=(node*)malloc(sizeof(node));
head->data=1;
p=head;
for(i=2;i<=n;i++)
{
q=(node*)malloc(sizeof(node));
p->next=q;
q->data=i;
p=p->next;
}
p->next=head;
}
void jose()
{
int i,j;
node *p,*q;
p=head;
for(j=1;j<=n;j++)
{
for(i=1;i<m;i++)
p=p->next; //??????°?p->next??????p????
printf("%d ",p->data);
p->data=p->next->data;
q=p->next; //????q=p;
p->next=p->next->next;
free(q);
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
creat();
jose();
printf("\n");
}
}