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

JAVA学习-练习试用Java实现“反转链表 II”

问题:

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

示例 1:

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:

输入:head = [5], left = 1, right = 1
输出:[5]
提示:

链表中节点数目为 n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n

解答思路:

以下是使用 Java 实现反转链表 II 的代码:

class ListNode {int val;ListNode next;ListNode(int val) {this.val = val;}
}public class ReverseLinkedListII {public ListNode reverseBetween(ListNode head, int left, int right) {// 创建一个虚拟头节点,方便处理边界情况ListNode dummy = new ListNode(0);dummy.next = head;// 找到需要反转的节点的前一个节点ListNode prev = dummy;for (int i = 0; i < left - 1; i++) {prev = prev.next;}// 开始反转节点ListNode curr = prev.next;for (int i = 0; i < right - left; i++) {ListNode next = curr.next;curr.next = next.next;next.next = prev.next;prev.next = next;}return dummy.next;}public static void main(String[] args) {// 构建测试链表ListNode head = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);ListNode node4 = new ListNode(4);ListNode node5 = new ListNode(5);head.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;int left = 2;int right = 4;ReverseLinkedListII solution = new ReverseLinkedListII();ListNode reversedHead = solution.reverseBetween(head, left, right);// 打印反转后的链表ListNode curr = reversedHead;while (curr!= null) {System.out.print(curr.val + " ");curr = curr.next;}}
}


上述代码中,定义了一个'reverseBetween'方法,用于反转链表中指定区间的节点。首先创建一个虚拟头节点'dummy',并将其指向链表的头节点`head`。然后通过一个循环找到需要反转的起始节点的前一个节点'prev'。接下来,从起始节点开始,依次将节点的指针进行反转,直到到达结束节点。最后返回虚拟头节点的下一个节点,即为反转后的链表头。在'main'方法中,构建了一个测试链表,并调用'reverseBetween'方法进行反转并打印结果。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

http://www.lryc.cn/news/456290.html

相关文章:

  • 15分钟学 Python 第35天 :Python 爬虫入门(一)
  • 【Qt】Qt学习笔记(一):Qt界面初识
  • Unity3D游戏的内存控制详解
  • 《数据结构》--栈【概念应用、图文并茂】
  • 国外电商系统开发-运维系统文件下载
  • 【CSS in Depth 2 精译_045】7.1 CSS 响应式设计中的移动端优先设计原则(上)
  • 在线教育新篇章:SpringBoot系统开发策略
  • cmdsh
  • 一键生成PPT的AI工具-Kimi!
  • java.lang.NoClassDefFoundError: kotlin/Result解决方案
  • LSTM的变体
  • LeetCode讲解篇之852. 山脉数组的峰顶索引
  • 矿井人员数据集,用于目标检测,深度学习,采用txt打标签,即yolo格式,也有原文件可以自己转换。总共3500张图片的数据量,划分给训练集2446张,
  • 消息队列RabbitMQ
  • RabbitMQ概述
  • Golang学习路线
  • Flink从ck拉起任务脚本
  • GADBench Revisiting and Benchmarking Supervised Graph Anomaly Detection
  • 某象异形滑块99%准确率方案
  • CDN绕过学习
  • SpringBoot日常:redission的接入使用和源码解析
  • npm包管理深度探索:从基础到进阶全面教程!
  • 最新免费GPT4O和Midjourney
  • python操作OpenAI教程
  • 如何版本REST API:综合指南
  • Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南
  • 网络安全-IPv4和IPv6的区别
  • 【移动端】事件基础
  • 软件测试比赛-学习
  • 力扣LeetCode-链表中的循环与递归使用