鱼C论坛

 找回密码
 立即注册
查看: 1863|回复: 4

[已解决]c++链表题答案里有个循环没看懂

[复制链接]
发表于 2019-3-4 09:28:16 | 显示全部楼层 |阅读模式

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

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

x

                               
登录/注册后可看大图
/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
   ListNode* reverseBetween(ListNode* head, int m, int n) {
       ListNode *dummy = new ListNode(0), *pre = dummy;
       dummy -> next = head;
       for (int i = 1; i < m; i++) {
           pre = pre -> next;
       }
       ListNode* cur = pre -> next;
       for (int i = 0; i < n - m; i++) {
           ListNode* move = cur -> next;
           cur -> next = move -> next;
           move -> next = pre -> next;
           pre -> next = move;
       }
       return dummy -> next;
   }
};
RT,答案中第二个for循环里的
move -> next = pre -> next;
pre -> next = move;
为什么pre->next不能换成cur,有大佬教教小白吗,谢谢了
最佳答案
2019-3-4 18:39:50
469826336 发表于 2019-3-4 14:29
这个我懂了,大佬能解释下那两行代码里的pre->next为什么不能换成cur吗

哦哦哦,我终于知道你说什么了,我还以为你说为什么pre->next不能等于cur呢
是这样的,你如果move->next=cur,然后cur=move的话,就会导致pre->next=cur 且 move->next=cur,这样不就矛盾了吗
而且,pre->next 不一定就是cur,第一次循环是cur,但从第二次循环开始,pre->next就和前面的move交换位置了,变成了pre -> move -> cur ->xxx,而你要把xxx变到pre后面,而不是cur前面,自然不能用cur来代替pre->next
这样懂了吗?你在学链表这章的时候,多画图,看链表的节点的指向,就会很容易理解了,如果还是不懂的话再提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-4 09:57:11 | 显示全部楼层
你画个指针指向图就知道了
首先,move = cur->next,也就是一开始的关系是这样的  pre->cur->move->xxx
然后,cur -> next = move -> next;  就变成这样了pre->cur->xxx   且  move->xxx(并列关系)
然后,move -> next = pre -> next; 接下来, pre->cur->xxx  且  move->cur(并列关系)
最后,pre -> next = move; 就完成一次翻转,pre -> move -> cur ->xxx
这样你是否懂了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-4 14:29:31 From FishC Mobile | 显示全部楼层
暗pluto 发表于 2019-3-4 09:57
你画个指针指向图就知道了
首先,move = cur->next,也就是一开始的关系是这样的  pre->cur->move->xxx
然 ...

这个我懂了,大佬能解释下那两行代码里的pre->next为什么不能换成cur吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-4 18:39:50 | 显示全部楼层    本楼为最佳答案   
469826336 发表于 2019-3-4 14:29
这个我懂了,大佬能解释下那两行代码里的pre->next为什么不能换成cur吗

哦哦哦,我终于知道你说什么了,我还以为你说为什么pre->next不能等于cur呢
是这样的,你如果move->next=cur,然后cur=move的话,就会导致pre->next=cur 且 move->next=cur,这样不就矛盾了吗
而且,pre->next 不一定就是cur,第一次循环是cur,但从第二次循环开始,pre->next就和前面的move交换位置了,变成了pre -> move -> cur ->xxx,而你要把xxx变到pre后面,而不是cur前面,自然不能用cur来代替pre->next
这样懂了吗?你在学链表这章的时候,多画图,看链表的节点的指向,就会很容易理解了,如果还是不懂的话再提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 08:36:47 | 显示全部楼层
暗pluto 发表于 2019-3-4 18:39
哦哦哦,我终于知道你说什么了,我还以为你说为什么pre->next不能等于cur呢
是这样的,你如果move->next ...

受教了,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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