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

链表内指定区间反转

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) {
    // write code here
    if (!head || !head.next || m === n) {
        return head;
    }
    let startPre = null,
        start,
        pre,
        curr = head;
    for (let i = 1; i <= n; i++) {
        const next = curr.next;
        if (i === m - 1) {
            startPre = curr;
        } else if (i === m) {
            start = curr;
        } else if (i > m) {
            curr.next = pre;
        }
        pre = curr;
        curr = next;
    }
    start.next = curr;
    if (!startPre) {
        return pre;
    } else {
        startPre.next = pre;
    }
    return head;
}
module.exports = {
    reverseBetween: reverseBetween,
};

一开始以为需要用快慢指针解题,其实不然,简单遍历即可搞定。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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