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

链表内指定区间反转

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

/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */

/**
 *
 * @param head ListNode类
 * @param m int整型
 * @param n int整型
 * @return ListNode类
 */
function reverseBetween(head, m, n) {
    const virtualHead = new ListNode(0);
    virtualHead.next = head;

    let pre = virtualHead,
        cur = null;

    // pre 前面不动的结点区域
    // 题目的结点顺序下标是从1开始的,这里需要移动到不动结点的最后一个位置,也就是m的前一个位置
    for (let i = 1; i < m; i++) {
        pre = pre.next;
    }

    // 开始需要反转的结点
    cur = pre.next;
   
    // 需要反转的循环次数
    for(let i = 0; i < n - m; i++) {
        // 利用一个临时变量完成两个结点的反转
        const temp = cur.next;
        // 当前结点指向下下个结点(跳过临时结点)
        cur.next = cur.next.next;
        
        // temp的下一个结点是前面不动结点的下一个结点(注意这里并不是cur)
        temp.next = pre.next;

        // 前面不动的区域的下一个结点是当前这个临时结点 
        pre.next = temp;

        // 经过上面的交换就完成了结点顺连,并且cur还完成了下移
    }

    return virtualHead.next;
}
module.exports = {
    reverseBetween: reverseBetween,
};

下面给出图解:

全部评论

相关推荐

accaacc:2到4k,不是2k到4k,所以年薪是30块
点赞 评论 收藏
分享
工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务