要疯了,帮忙看下!!!
今天看了一下线性链表,做了一道题目,内容如下:设有N个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,如此下去直到所有人都出列为止.试求出他们的出列次序.(假定N的值从1到N,即从1开始数)程序如下:
#include<stdio.h>
#include<malloc.h>
#define N 5
typedef struct node
{
int x;
struct node *next;
}list;
list *create(int n)
{
list *head,*p,*r;
int i;
p=(list *)malloc(sizeof(list));
head=p;
p->next=NULL;
r=p;
for(i=0;i<n;i++)
{
p=(list *)malloc(sizeof(list));
p->x=i+1;
r->next=p;
r=p;
}
head=r->next;
return head;
}
list *del(list *head,int t)
{
list *p,*r,*s;
p=head;
s=p;
p=p->next;
while(t!=p->x)
{
s=p;
p=p->next;
}
r=p;
s->next=p->next;
p=s->next;
free(r);
return s;
}
void calcul(list *head,int m)
{
int i,k=0;
list *p,*r;
head=p;
while(head!=head->next)
{
for(i=0;i<m;i++)
{
p=p->next;
if(p!=head)
k++;
else
i--;
if(k==m)
{
printf("%3d",p->x);
k=0;
r=del(head,p->x);
p=r;
break;
}
}
}
}
void main()
{
list *head;
int M=2;
head=create(N);
calcul(head,M);
}
运行的结果是无限循环,看了大半天也找不出毛病,求各位帮帮忙,小弟在此深表感谢!