题解 | #链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

这个题很简单,思考起来:

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */
class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        ListNode* hHead = new ListNode(-1);
        hHead->next = head;

        ListNode* preHead = hHead;
        ListNode* nowHead = head;
        for(int i = 1; i < m ;i++ ){
            preHead = nowHead;
            nowHead = nowHead->next;
        }
    /** 很关键的一步 **/
        for( int i = m ; i < n ; i++){
            ListNode* temNode = nowHead->next; @1
            nowHead->next = temNode->next;     @2
            temNode->next = preHead->next;     @3
            preHead->next = temNode;           @4
        }
        return hHead->next;
    }
};

关键步骤:
在这里,就这个题而论,思考这个循环,关键的是记住,preHead,nowHead位置都没有变。
这里就循环了两次

第一次循环,链表变成了1->3->2->4->5->null
详细过程:preHead:1 nowHead:2
@1:将2的下一个指向的数字3的地址赋给临时节点temNode
@2:将3的下一个指向的数字4的地址赋给nowHead的next指针,也就是将2指向4
@3:将1的下一个指向的数字2的地址赋给temNode的next指针,也就是将3指向2
@4:将preHead的next指针指向3,也就是1指向3

第二次循环,链表变成了1->4->3->2->5->null
详细过程:preHead:1 nowHead:2
@1:将2的下一个指向的数字4的地址赋给临时节点temNode
@2:将4的下一个指向的数字5的地址赋给nowHead的next指针,也就是将2指向5
@3:将1的下一个指向的数字3的地址赋给temNode的next指针,也就是将4指向3
@4:将preHead的next指针指向3,也就是1指向4

#在找工作求抱抱#
全部评论

相关推荐

03-29 17:05
门头沟学院 Java
asdasdasda...:我前段时间找工作焦虑,有几天连续熬夜熬穿了,然后心脏突然不舒服,立马躺床上睡觉了,然后第二天还是不舒服,去看医生说是心率不齐,吓得我后面天天早早睡觉,调养身体,过了好几天才好过来。所以真的,工作这些东西哪有那么重要,最多钱多一点钱少一点,降低物欲。活着才是最重要的,现在想想真的后怕
如何排解工作中的焦虑
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务