力扣第92题

一、题目:92. 反转链表 II
92
二、题目解析:

题目解析:改题需要先理解第206题反转链表,会更容易理解此题,此题只需要在反转链表的基础上进行很小变动,总体分为两大部
① 反转left到rignt的链表 1–>2–>3–>4–>5–>6–>7 预期变成 1–>2    3<–4<–5     6–>7
② 将反转后的链表与原链表拼接 将2指向5 3指向6
解题步骤:

  1. 定义三个指针同反转链表题
  2. 先遍历到要操作的结点
  3. 占住pre和curr的起始位置
  4. 开始反转链表、还是第一题的那四步
  5. 链表拼接

图示帮助理解:
92
三、代码如下:

可先查看反转链表第一题 力扣第206反转链表

public ListNode reverseBetween(ListNode head, int left, int right) {
        //定义三个指针同反转链表题
        ListNode curr = head;
        ListNode next = null;
        ListNode pre = null;
        //先遍历到要操作的结点
        for(int i = 1;i < left ;i++){
            pre = curr;
            curr = curr.next;
        }
        //占住pre和curr的起始位置
        ListNode curr2 = curr;
        ListNode pre2 = pre;

        //开始反转链表
        for(int i = left ; i <= right; i++){
            //还是那四步
            next = curr.next;
            curr.next = pre;
            pre = curr;
            curr = next;
        }
        //链表拼接   疑问点:为啥要有head = pre 这一步 ?   这里需要考虑到 left = 1的情况
        //1.如果我们要反转的链表是出于中间的,则头部和尾部是不会变的 ,头部不会受影响,直接return head就可以
        //2.假设left = 1  right = 5  那么则需要返回反转后的链表的头部  也就 5-->4-->3-->2-->1-->6-->7
        //3.如果left是一个出于中间的位置,pre一定不等于null   否则,如果left = 1 的情况下 curr指向第一个结点  pre指向null结点
        //4.所以可以以[pre2.next!=null]为条件来进行判断
        if(pre2.next!=null){  //left>1也可以  一个意思
            pre2.next = pre;
        }else{
            //头部设置为反转后的链表
            head  =  pre;
        }
        curr2.next = curr;
        return head;
    }

四、测试
92

五、结束

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Run,boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值