#include<stdio.h> #include<stdlib.h> typedef struct Node { int num; int pasword; struct Node *next;

2025-05-06 06:48:48
推荐回答(3个)
回答(1):

函数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;
}

回答(2):

我使用五个人测试,m=2,也会出错。问题在于循环中语句“m=p->pasword;”改变了m的值。
使得下次循环中
for(i=1;i {
q=p;
p=p->next;
}

出错。。
建议“m=p->pasword;”中的m用其他变量代替。。。

回答(3):

for(i=1;i{ q=p;
p=p->next;
}
这一句是你想用来表示,从第几个人开始吗》???
m=p->pasword; 这个又是干嘛用啊。。