c++链表题答案里有个循环没看懂
http://m.qpic.cn/psb?/V13DnKFA2b7guU/DRC37I*01VEPAgv3FqwAUz3euqzRUU8eGMnPHoa7w0Q!/b/dL8AAAAAAAAA&bo=pwHSAAAAAAADB1Y!&rf=viewer_4/**
* 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,有大佬教教小白吗,谢谢了 你画个指针指向图就知道了
首先,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
这样你是否懂了? 暗pluto 发表于 2019-3-4 09:57
你画个指针指向图就知道了
首先,move = cur->next,也就是一开始的关系是这样的pre->cur->move->xxx
然 ...
这个我懂了,大佬能解释下那两行代码里的pre->next为什么不能换成cur吗 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
这样懂了吗?你在学链表这章的时候,多画图,看链表的节点的指向,就会很容易理解了,如果还是不懂的话再提问
暗pluto 发表于 2019-3-4 18:39
哦哦哦,我终于知道你说什么了,我还以为你说为什么pre->next不能等于cur呢
是这样的,你如果move->next ...
受教了,谢谢大佬{:5_105:}
页:
[1]