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

反转链表II

中间进行反转,两种方法:

力扣官方,就是要设置null,截断再和直接反转一样。 

class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {// 因为头节点有可能发生变化,使用虚拟头节点可以避免复杂的分类讨论ListNode dummyNode = new ListNode(-1);dummyNode.next = head;ListNode pre = dummyNode;// 第 1 步:从虚拟头节点走 left - 1 步,来到 left 节点的前一个节点// 建议写在 for 循环里,语义清晰for (int i = 0; i < left - 1; i++) {pre = pre.next;}// 第 2 步:从 pre 再走 right - left + 1 步,来到 right 节点ListNode rightNode = pre;for (int i = 0; i < right - left + 1; i++) {rightNode = rightNode.next;}// 第 3 步:切断出一个子链表(截取链表)ListNode leftNode = pre.next;ListNode curr = rightNode.next;// 注意:切断链接pre.next = null;rightNode.next = null;// 第 4 步:同第 206 题,反转链表的子区间reverseLinkedList(leftNode);// 第 5 步:接回到原来的链表中pre.next = rightNode;leftNode.next = curr;return dummyNode.next;}private void reverseLinkedList(ListNode head) {// 也可以使用递归反转一个链表ListNode pre = null;ListNode cur = head;while (cur != null) {ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}}
}

方法二、我的方法。因为有数字,可以在循环里操作

public static ListNode reverseBetween(ListNode head,int left,int right) {if (head == null || left==right) return head;// 虚拟头节点--前指针 现指针 后指针ListNode dummy=new ListNode(0);dummy.next=head;ListNode pre=dummy;// 赋值、转向、移动  赋转移for(int i=0;i<left-1;i++){pre=pre.next;}ListNode cur=pre.next;ListNode nex=null;ListNode prev=null;// 就是这里for(int i=0;i<right-left+1;i++){nex=cur.next;cur.next=prev;prev=cur;cur=nex;}pre.next.next=cur;pre.next=prev;return dummy.next;}

http://www.xdnf.cn/news/6022.html

相关文章:

  • mysql常用方法
  • 关于Go语言的开发环境的搭建
  • 组合问题(多条件)
  • Linux 系统安全基线检查:入侵防范测试标准与漏洞修复方法
  • C语言| 静态局部变量
  • 3级-运算符
  • 从数据中台到数据飞轮:实现数据驱动的升级之路
  • 论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity
  • SparkSQL入门指南:从基础到实践的全面解析
  • 配置Nginx启用Https
  • 豌豆 760 收录泛滥现象深度解析与应对策略
  • FedTracker:为联邦学习模型提供所有权验证和可追溯性
  • Unity3D 序列化机制:引擎内的应用场景和基本原理
  • vue3项目创建-配置-elementPlus导入-路由自动导入
  • 江苏发改委回复:分时电价调整对储能项目的影响 源网荷储一体化能量管理系统储能EMS
  • 为什么企业建站或独立站选用WordPress
  • C程序的存储空间分配
  • 汉得 x 真味生物|H-ZERO PaaS项目启动,共启数字化新征程!
  • 可视化+智能补全:用Database Tool重塑数据库工作流
  • java 结合 FreeMarker 和 Docx4j 来生成包含图片的 docx 文件
  • 七、深入 Hive DDL:管理表、分区与洞察元数据
  • 邀请函|PostgreSQL培训认证报名正式开启
  • 演员评论家算法
  • LS-DYNA一箭穿心仿真分析
  • Oracle CDB 与 Non-CDB (NoCDB) 的区别
  • Linux(1)编译链接和gcc
  • typedef unsigned short uint16_t; typedef unsigned int uint32_t;
  • Lin4neuro 系统详解
  • Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案
  • zabbix最新版本7.2超级详细安装部署(一)