鱼C论坛

 找回密码
 立即注册
查看: 698|回复: 17

[已解决]C语言

[复制链接]
发表于 2020-4-16 19:04:46 | 显示全部楼层 |阅读模式

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

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

x
E34D58E4A512766374087F432F4A497C.png

这题推的过程麻烦大佬讲一下可以吗?谢谢。
最佳答案
2020-4-16 20:17:52
老牛来学习 发表于 2020-4-16 20:10
while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p

我觉得是你看错了,while()后面没有大括号,就只执行p=p->next.
这个循环的作用就是找到最后面的节点而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 19:08:59 | 显示全部楼层
答案A
因为q是原来的首节点,通过while循环找到尾节点,然后将q放到最后
也就是A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-16 19:15:30 | 显示全部楼层
BngThea 发表于 2020-4-16 19:08
答案A
因为q是原来的首节点,通过while循环找到尾节点,然后将q放到最后
也就是A

但是按照这上面写的第一行之后,是不是s,s->next和p都是首节点的地址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 19:31:51 | 显示全部楼层
BngThea 发表于 2020-4-16 19:08
答案A
因为q是原来的首节点,通过while循环找到尾节点,然后将q放到最后
也就是A

我理解的这个程序是:s把他的地址给q,此时q和s同时指向首节点。
s->next为首节点的地址,那么s=s->next之后s为首节点,又把s赋值给p
此时sp为首节点,q为头指针。

进入循环:
p->next为第二个节点,所以p=p->next之后p为第二个节点。指向顺序为q-s-p
q为头指针把它赋值给p->next;和q->next = NULL;是什么意思?没弄明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 19:33:50 | 显示全部楼层
本帖最后由 耻思lhj 于 2020-4-16 19:35 编辑
老牛来学习 发表于 2020-4-16 19:15
但是按照这上面写的第一行之后,是不是s,s->next和p都是首节点的地址?


不是只有q---->首节点,s,p,s->next这三个都等于q->next,也就是原来首节点的next,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 19:35:21 | 显示全部楼层
耻思lhj 发表于 2020-4-16 19:33
不是只有q---->首节点,s,p,s---->next这三个都等于q---->next,也就是原来首节点的next,

是头指针的next把?
这个明白,while循环没明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 19:38:23 | 显示全部楼层
老牛来学习 发表于 2020-4-16 19:35
是头指针的next把?
这个明白,while循环没明白

while就是判断,你现在p是不是最后一个节点(如果是最后一个节点p->next是指向null的),不是就再往后挪。找到后就把p->next指向原来的首节点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 20:04:19 | 显示全部楼层
耻思lhj 发表于 2020-4-16 19:38
while就是判断,你现在p是不是最后一个节点(如果是最后一个节点p->next是指向null的),不是就再往后挪 ...

while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p
pnext = q之后pnext是首节点;指向顺序为q->s和snext的地址->p->q变成死循环了;
q->next等于NULL;指向顺序为q->s和snext的地址->p->q结束;

下一次循环

pnext=p相当于把q赋给p,由于qnext为NULL,所以指向变成q->s和snext的地址->p结束;
q又赋值给pnext,顺序又变成q->s和snext的地址->p->q结束;

这不就指向顺序一直没变吗??并没有达到你说的效果啊?我理解的有错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 20:07:21 | 显示全部楼层
老牛来学习 发表于 2020-4-16 20:04
while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p


你看到最后一句代码了吗,q->next=null。
没有这一句之前,链表变成一个圆了
还有,你这个是真的看的我头晕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 20:10:00 | 显示全部楼层
耻思lhj 发表于 2020-4-16 20:07
你看到最后一句代码了吗,q->next=null。
没有这一句之前,链表变成一个圆了
还有,你这个 ...

嗯,看到了,我上面也说了,死循环,之后加上NULL,进入下一次循环,你可以看看我写的对不对,但是按照这个推 好像并没有达到效果呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 20:10:46 | 显示全部楼层
BngThea 发表于 2020-4-16 19:08
答案A
因为q是原来的首节点,通过while循环找到尾节点,然后将q放到最后
也就是A

while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p
pnext = q之后pnext是首节点;指向顺序为q->s和snext的地址->p->q变成死循环了;
q->next等于NULL;指向顺序为q->s和snext的地址->p->q结束;

下一次循环

pnext=p相当于把q赋给p,由于qnext为NULL,所以指向变成q->s和snext的地址->p结束;
q又赋值给pnext,顺序又变成q->s和snext的地址->p->q结束;

这不就指向顺序一直没变吗??并没有达到你说的效果啊?我理解的有错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 20:10:53 | 显示全部楼层
本帖最后由 耻思lhj 于 2020-4-16 20:12 编辑
老牛来学习 发表于 2020-4-16 20:04
while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p


最后有一行代码q->next=null,没有这代码之前,链表变成一个圆了。

这代码不看他用来Temp的变量,其实用图来表示就是,链表的尾部和头部连在一起了,让后又把它从a前面的地方切断。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 20:17:52 | 显示全部楼层    本楼为最佳答案   
老牛来学习 发表于 2020-4-16 20:10
while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p

我觉得是你看错了,while()后面没有大括号,就只执行p=p->next.
这个循环的作用就是找到最后面的节点而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-16 20:21:44 | 显示全部楼层
耻思lhj 发表于 2020-4-16 20:17
我觉得是你看错了,while()后面没有大括号,就只执行p=p->next.
这个循环的作用就是找到最后面的节点而 ...

我吐了,可能是盯的眼睛有点瞎,这都弄错了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 20:22:41 | 显示全部楼层
老牛来学习 发表于 2020-4-16 20:10
while循环里的执行顺序:

p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p

while循环不是只是移动p到末尾吗?只有一条语句啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-16 20:25:04 | 显示全部楼层
BngThea 发表于 2020-4-16 20:22
while循环不是只是移动p到末尾吗?只有一条语句啊

刚看错了,老眼昏花
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 20:29:24 | 显示全部楼层
老牛来学习 发表于 2020-4-16 20:25
刚看错了,老眼昏花

我刚刚也把鱼友看成色友了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-16 21:15:54 | 显示全部楼层
耻思lhj 发表于 2020-4-16 20:29
我刚刚也把鱼友看成色友了。。。。

那这就是你的问题了,兄嘚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 16:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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