【java】力扣 反转链表II

文章目录

反转链表II

网址 反转链表II

题目介绍

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

题目讲解

对于这个题,利用哨兵节点会更好理解一些

让哨兵节点去当头结点的前一个节点

然后再定义两个节点pre、cur

反转最后应该是这样

因为题目说left是节点反转开始的位置
我们需要找到节点开始反转开始的前一个节点 来进行反转
所以要循环left-1次

那为什么要找到反转节点的前一个节点呢?

以1,2,3,4,5 left=2,right=4为例

反转2-4 反转成功后,1后面是4,而5前面是2,所以需要1的辅助来进行反转,以确保反转的成功性

反转过程与整个反转类似 详细请看
力扣 反转链表I

下面就是代码展示:

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {
    ListNode dummy = new ListNode(0,head);//定义一个哨兵节点
    ListNode p0 = dummy;
    for(int i =0;i<left-1;i++){
        p0 = p0.next;//
    }  
    ListNode pre = null;
    ListNode cur = p0.next;
    for(int i =0;i<right-left+1;i++){
        ListNode nxt = cur.next;
        cur.next = pre;
        pre = cur;
        cur = nxt;
    }
    p0.next.next = cur;
    p0.next = pre;
    return dummy.next;
    
    }
}
相关推荐
前端世界3 分钟前
float 还是 double?用储罐体积计算带你看懂 C 语言浮点数的真实世界坑
java·c语言·开发语言
豐儀麟阁贵6 分钟前
8.5在方法中抛出异常
java·开发语言·前端·算法
胖咕噜的稞达鸭22 分钟前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
Bro_cat36 分钟前
Java基础
java·开发语言·面试
小青龙emmm38 分钟前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
一起养小猫1 小时前
《Java数据结构与算法》第三篇(下)队列全解析:从基础概念到高级应用
java·开发语言·数据结构
vx_vxbs661 小时前
【SSM电动车智能充电服务平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·spring cloud·小程序·php·idea
叹隙中驹石中火梦中身1 小时前
解耦神器Event和EventListener
java
WolfGang0073211 小时前
代码随想录算法训练营Day28 | 509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯
算法
Boop_wu1 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法