函数fun中,q->next=p->next;
q没有初始化,执行的是一个未初始化的内存,所以会出问题
建议修改为:
LinkList *p,*q,*s;
p = q = L;
修改后的代码为:
#include
#include
typedef struct Node
{
int num;
int pasword;
struct Node *next;
}LinkList;
LinkList *creat(int n)
{
LinkList *p,*q,*head;
int i=1;
head=p=(LinkList *)malloc(sizeof(LinkList));
p->num=i;
printf("请输入第1个人的密码:");
scanf("%d",&p->pasword);
for(i=2;i<=n;i++)
{
q=(LinkList *)malloc(sizeof(LinkList));
printf("请输入第%d个人的密码:",i);
scanf("%d",&q->pasword);
q->num=i;
p->next=q;
p=q;
}
p->next=head;
return head;
}
void fun(LinkList *L)
{
int m,i;
LinkList *p,*q,*s;
p = q = L;
printf("请输入m的初值:");
scanf("%d",&m);
printf("出列顺序为:");
while(p->next!=p)
{
for(i=1;i
q=p;
p=p->next;
}
printf("%5d",p->num);
m=p->pasword;
s=p;
q->next=p->next;
p=p->next;
free(s);
break;
}
printf("%5d",p->num);
printf("\n");
}
main()
{
LinkList *L;
int n;
printf("请输入实验人数:");
scanf("%d",&n);
L=creat(n);
fun(L);
return 0;
}
我使用五个人测试,m=2,也会出错。问题在于循环中语句“m=p->pasword;”改变了m的值。
使得下次循环中
for(i=1;i
q=p;
p=p->next;
}
出错。。
建议“m=p->pasword;”中的m用其他变量代替。。。
for(i=1;i
p=p->next;
}
这一句是你想用来表示,从第几个人开始吗》???
m=p->pasword; 这个又是干嘛用啊。。