C语言
这题推的过程麻烦大佬讲一下可以吗?谢谢。
答案A
因为q是原来的首节点,通过while循环找到尾节点,然后将q放到最后
也就是A BngThea 发表于 2020-4-16 19:08
答案A
因为q是原来的首节点,通过while循环找到尾节点,然后将q放到最后
也就是A
但是按照这上面写的第一行之后,是不是s,s->next和p都是首节点的地址? 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;是什么意思?没弄明白
本帖最后由 耻思lhj 于 2020-4-16 19:35 编辑
老牛来学习 发表于 2020-4-16 19:15
但是按照这上面写的第一行之后,是不是s,s->next和p都是首节点的地址?
不是只有q---->首节点,s,p,s->next这三个都等于q->next,也就是原来首节点的next, 耻思lhj 发表于 2020-4-16 19:33
不是只有q---->首节点,s,p,s---->next这三个都等于q---->next,也就是原来首节点的next,
是头指针的next把?
这个明白,while循环没明白 老牛来学习 发表于 2020-4-16 19:35
是头指针的next把?
这个明白,while循环没明白
while就是判断,你现在p是不是最后一个节点(如果是最后一个节点p->next是指向null的),不是就再往后挪。找到后就把p->next指向原来的首节点。 耻思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结束;
这不就指向顺序一直没变吗??并没有达到你说的效果啊?我理解的有错误?
老牛来学习 发表于 2020-4-16 20:04
while循环里的执行顺序:
p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p
你看到最后一句代码了吗,q->next=null。
没有这一句之前,链表变成一个圆了{:5_109:}
还有,你这个是真的看的我头晕 耻思lhj 发表于 2020-4-16 20:07
你看到最后一句代码了吗,q->next=null。
没有这一句之前,链表变成一个圆了
还有,你这个 ...
嗯,看到了,我上面也说了,死循环,之后加上NULL,进入下一次循环,你可以看看我写的对不对,但是按照这个推 好像并没有达到效果呢{:10_266:} 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结束;
这不就指向顺序一直没变吗??并没有达到你说的效果啊?我理解的有错误? 本帖最后由 耻思lhj 于 2020-4-16 20:12 编辑
老牛来学习 发表于 2020-4-16 20:04
while循环里的执行顺序:
p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p
最后有一行代码q->next=null,没有这代码之前,链表变成一个圆了。
这代码不看他用来Temp的变量,其实用图来表示就是,链表的尾部和头部连在一起了,让后又把它从a前面的地方切断。 老牛来学习 发表于 2020-4-16 20:10
while循环里的执行顺序:
p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p
我觉得是你看错了,while()后面没有大括号,就只执行p=p->next.
这个循环的作用就是找到最后面的节点而已 耻思lhj 发表于 2020-4-16 20:17
我觉得是你看错了,while()后面没有大括号,就只执行p=p->next.
这个循环的作用就是找到最后面的节点而 ...
{:10_266:}我吐了,可能是盯的眼睛有点瞎,这都弄错了。。。 老牛来学习 发表于 2020-4-16 20:10
while循环里的执行顺序:
p = pnext之后pnext是第三个节点;指向顺序为 q->s和snext的地址->p
while循环不是只是移动p到末尾吗?只有一条语句啊 BngThea 发表于 2020-4-16 20:22
while循环不是只是移动p到末尾吗?只有一条语句啊
刚看错了,老眼昏花 老牛来学习 发表于 2020-4-16 20:25
刚看错了,老眼昏花
我刚刚也把鱼友看成色友了。。。。{:5_104:} 耻思lhj 发表于 2020-4-16 20:29
我刚刚也把鱼友看成色友了。。。。
那这就是你的问题了,兄嘚{:10_257:}
页:
[1]