void print_menu_main(){
stu *p;
p= (stu *)malloc(sizeof(stu));
head=p;
for(int i=0;i<=2;i++){
if(i<2)p=p->next=(stu *)malloc(sizeof(stu));
}
p->next=NULL;
printf("%d\n",p);
p=head;
printf("%d\n",p);
while(p){
p=p->next;
}
}
typedef int Status;
typedef float ElemType;
typedef struct student{
char ID2[MAX];
char name[MAX];
Status basic;
Status postsalary;
Status benefit;
Status insure;
Status pubfund;
struct student *next;
}stu;
C语言:为什么我的程序的while(p){ p=p->next; }不能执行下去?
答案:3 悬赏:50 手机版
解决时间 2021-03-01 10:30
- 提问者网友:献世佛
- 2021-03-01 02:38
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-03-01 03:42
看不出来有什么问题。程序提示什么?
全部回答
- 1楼网友:woshuo
- 2021-03-01 06:18
注意head每次指向哪个节点
head->next总是指向已经经过逆置的最后一个节点,也就是新的经过逆置的头节点
所以每次完成一个新的节点的逆置,要将其next指向上一个逆置的节点,刚好是head->next指向的节点
比如原来有链表 a->b->c->d->null
开始head->next = a, head->next->next=b
首先让p=a,并让a->next=null, 也就是让a成为尾节点
然后q指向b,此时head->next还是指向a的,也就是刚刚完成逆置的节点
while开始之后
每次都将q赋值给p,于是 p=b, q =c, b->next=head->next = a, head-next = b
此时head->next指向b,刚好又是刚完成逆置的节点
以后继续循环
- 2楼网友:洒脱疯子
- 2021-03-01 05:00
while(p){p=p->next;}
p为指针,是地址,地址不为零,只能原地打转。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯