鱼C论坛

 找回密码
 立即注册
查看: 1540|回复: 8

[已解决]单链表头插法出问题啦!!

[复制链接]
发表于 2018-10-7 20:07:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不知道哪里出问题了!!
最佳答案
2018-10-7 20:23:48
  1. void addBook(struct Book **head)
  2. {
  3.         struct Book *p;
  4.         p = (struct Book *)malloc(sizeof(struct Book));
  5.         if (p == NULL)
  6.         {
  7.                 printf("Memory allocation failed");
  8.                 exit(1);
  9.         }

  10.     getInput(p);

  11.         if (*head != NULL)
  12.         {
  13.                 p->next = (*head)->next;
  14.                 (*head)->next = p;
  15.         }
  16.         else
  17.         {
  18.                 *head = p;
  19.                 p->next = NULL;
  20.         }
  21. }
复制代码
2.png
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-7 20:07:51 | 显示全部楼层
本帖最后由 风骚的小胖子。 于 2018-10-7 20:08 编辑

输出结果是这样!只能输入《带你学C带你飞》然后回车就出现这个
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 20:23:48 | 显示全部楼层    本楼为最佳答案   
  1. void addBook(struct Book **head)
  2. {
  3.         struct Book *p;
  4.         p = (struct Book *)malloc(sizeof(struct Book));
  5.         if (p == NULL)
  6.         {
  7.                 printf("Memory allocation failed");
  8.                 exit(1);
  9.         }

  10.     getInput(p);

  11.         if (*head != NULL)
  12.         {
  13.                 p->next = (*head)->next;
  14.                 (*head)->next = p;
  15.         }
  16.         else
  17.         {
  18.                 *head = p;
  19.                 p->next = NULL;
  20.         }
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 20:46:41 | 显示全部楼层

对了谢谢大佬。但是p->next=(*head)->next;
                             (*head)->next=p;
什么意思来的理解不了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 20:48:25 | 显示全部楼层
风骚的小胖子。 发表于 2018-10-7 20:46
对了谢谢大佬。但是p->next=(*head)->next;
                             (*head)->next=p;
什么意思 ...

void addBook(struct Book **head)
head 是二级指针,*head 降级变回一级指针,才是指向结构体的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 20:51:44 | 显示全部楼层

(*head)->next=p;
head这个结构体指针内部指针指向p指针能理解。按道理这个P内部指针应该指向NULL指针才组成单链表啊。但是上一句这个p->next=(*head)->next;这个又是这个p结构体内部指针又指向头指针的内部指针是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 20:55:52 | 显示全部楼层
claws0n 发表于 2018-10-7 20:48
void addBook(struct Book **head)
head 是二级指针,*head 降级变回一级指针,才是指向结构体的指针

这个懂 但是为什么是动态申请的这个结构体的内部指针指向这个头指针的地址,按概念不是反了吗?是头指针指向结构体地址然后结构体内部指针又指向结构体地址。。如此类推 最后结构体内部指针指向NULL吗
然后又是这个头指针的内部指针指向这个P地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 21:29:48 | 显示全部楼层
风骚的小胖子。 发表于 2018-10-7 20:55
这个懂 但是为什么是动态申请的这个结构体的内部指针指向这个头指针的地址,按概念不是反了吗?是头指针 ...

head 不是结构体指针。你回头看 swap(int *x, int *y); swap(&a, &b); 原型里面,x 和 y 都是指针。
head 是指向【结构体指针】的指针。你得先降级,变回结构体指针,数据类型跟 p 一样,才可以赋值。
有 if () else ()
一开始是空,跑 else,之后不是空的时候,跑 if

我做的是头插法,可能你要的是尾插法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 21:33:31 | 显示全部楼层
claws0n 发表于 2018-10-7 21:29
head 不是结构体指针。你回头看 swap(int *x, int *y); swap(&a, &b); 原型里面,x 和 y 都是指针。
hea ...

好的我先去看看资料。实在不懂了再来找你。看下私聊呀/解救下我这个渴望学好C的孩子吧~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 01:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表