为了账号安全,请及时绑定邮箱和手机立即绑定

关于c语言初学链表问题,问题在注释里?

关于c语言初学链表问题,问题在注释里?

C
月关宝盒 2018-07-16 09:06:52
#include <stdio.h>#include <stdlib.h>struct node{int data;struct node *next; };struct node *add(struct node *head);//创建节点 void display(struct node *head);//输出链表每项数据 int main(){char ans;struct node *mylink=NULL;printf("要加入新的节点吗?");scanf(" %c",&ans);while(ans!='n'){mylink=add(mylink);printf("要再加入新的节点吗?");scanf(" %c",&ans); } display(mylink);} struct node *add(struct node *head){int data;struct node *pr=(struct node *)malloc(sizeof(struct node)); if(head==NULL){head=pr;printf("输入数据"); scanf(" %d",&(head->data));head->next=NULL;}else{struct node *p=head;while(p->next !=NULL) //这里不是也有p->next!= NULL吗? {p=p->next;}printf("输入数据"); scanf(" %d",&(p->data));p->next=NULL;}}void display(struct node *head){struct node *p=head;while(p != NULL) // 为什么改成 while(p->next!= NULL) 程序就会崩溃,而且不能调试,我发现在display函数里只要有 这一句程序就会崩溃,而上面的42行却没有问题 {printf("%d",p->data);p=p->next;}}
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

  1. 把while(p != NULL)改成while(p->next!= NULL)的话,从代码看不会有崩溃的问题,只是最后一个结点的内容打印不出来。这里的逻辑应该是while(p != NULL),结点指针不为空就输出。

  2. 这代码若崩溃,原因不在你说的那里,而在于函数add中的else以后的代码逻辑错误,要改成如下才行——

https://img1.sycdn.imooc.com//5b59d6b50001d0c807270200.jpg

查看完整回答
反对 回复 2018-07-26
  • 1 回答
  • 0 关注
  • 746 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信