力扣 92. 反转链表 II js方法

本文介绍了一种在指定范围内反转链表的方法。通过使用额外的指针来定位反转区间的起始位置,并完成链表的反转操作。同时展示了两种实现方式:传统指针操作和ES6解构赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
本题需要先了解反转链表1中如何反转链表
区别就是要再开辟两个指针。

var reverseBetween = function(head, left, right) {
    let pre = null;
    let current = head;
    let next = head;
    //先让指针跳到要反转链表部分上
    for(let i=1;i<left;i++)
    {
        pre=current;
        current=current.next;
        next=current;
    }
    //开辟两个指针用来方便把反转完成的链表连接到本来的链表上
    let current2=current;
    let pre2=pre;
	//反转需要反转的链表部分
    for(let i=left;i<=right;i++)
    {
        next=current.next;
        current.next=pre;
        pre=current;
        current=next;
    }
   	//这里要考虑两种情况
   	//1.left为1表示反转部分从链表开头就开始了,需要特殊考虑
    if(left>1)
    {
        pre2.next=pre;
    }
    else{
        head=pre;
    }
    current2.next=current;
    return head;
};

ES6解构赋值
性能可能下降

var reverseBetween = function(head, left, right) {

    let pre = null;
    let current = head;
    for(let i=1;i<left;i++)
    {
        pre=current;
        current=current.next;
    }
    let current2=current;
    let pre2=pre;

    for(let i=left;i<=right;i++)
    {
		//解构赋值 这时候顺序就不重要了
        [current.next,pre,current]=[pre,current,current.next]
    }
    if(left>1)
    {
        pre2.next=pre;
    }
    else{
        head=pre;
    }
    current2.next=current;
    return head;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值