当前位置: 首页 > article >正文

【递归】 92. 反转链表 II

92. 反转链表 II

解题思路

  • 定义了单链表节点的数据结构,包含整数值 val 和指向下一个节点的引用 next。

  • 在 Solution 类中,定义了一个类变量 successor,用于保存当前节点的后继节点。

  • 实现了 reverseBetween 方法,该方法通过递归实现反转链表中指定范围 [left, right] 的节点。如果 left 等于 1,表示从链表头部开始反转,调用 reverseN 方法。

  • reverseN 方法用于翻转链表开头的 n 个元素。递归的终止条件是 n 等于 1,此时保存当前节点的后继节点,并返回当前节点。在递归过程中,将链表中的相邻节点反转,确保正确的连接关系。

  • 在 reverseN 方法中,通过递归调用获得新的头节点 last,然后调整相邻节点的指向关系,将当前节点 head 的 next 指针指向 successor,完成反转。

  • 返回反转后的链表的新头节点 last。

  • 总体思路是通过递归实现链表反转,其中 reverseBetween 方法用于处理整个范围的反转,而 reverseN 方法用于处理范围内开头的 n 个元素的反转。通过递归调用和相邻节点的指向关系调整,实现了链表的指定范围反转。

/**
 * 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 {
    ListNode successor = null;// 后驱节点

    public ListNode reverseBetween(ListNode head, int left, int right) {
        if(left == 1){
            return reverseN(head,right);
        }
        head.next = reverseBetween(head.next,left - 1,right - 1);
        return head;
    }

    // 翻转链表开头的n个元素
    ListNode reverseN(ListNode head,int n){
        if(n == 1){
            successor = head.next;// 保存第 n + 1个节点
            return head;
        }

        ListNode last = reverseN(head.next,n - 1);// 返回新的头节点
        head.next.next = head;// head作为新的尾节点
        head.next = successor;
        return last;
    }
}


http://www.kler.cn/a/228246.html

相关文章:

  • OSCP - Proving Grounds - Quackerjack
  • 99.12 金融难点通俗解释:毛利率
  • 单调栈详解
  • 【设计模式-行为型】状态模式
  • LabVIEW 太阳能光伏发电系统智能监控
  • JAVA毕业设计210—基于Java+Springboot+vue3的中国历史文化街区管理系统(源代码+数据库)
  • FPGA开发
  • 【Spring Boot 3】【@Scheduled】多线程执行定时任务
  • HTTP中传输协议的数据格式
  • Python爬虫某云音乐歌手及下载其免费音乐
  • 【java批量导出pdf】优化方案
  • Liunx基本指令
  • 【PyRestTest】高级使用
  • Python循环语句——while循环的嵌套应用
  • 乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新
  • 神经网络基本原理
  • 部署私有知识库项目FastGPT
  • 图论练习3
  • vue绘制语音波形图---wavesurfer.js
  • 【Linux】进程间通信 --管道通信
  • JVM之Java内存区域
  • IP风险画像在企业网络安全中应用
  • freertos 源码分析一 list链表数据结构
  • 终端环境:zsh 和 oh-my-zsh
  • 【项目管理】CMMI-项目结项管理过程
  • Unity中blendtree和state间的过渡