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

JAVA练习291- 反转链表

题目概览

给你单链表的头节点head,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]输出:[2,1]

示例 3:

输入:head = []输出:[]

提示:

  • 链表中节点的数目范围是[0, 5000]
  • -5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

来源:206. 反转链表 - 力扣(LeetCode)

解题分析

方法一:迭代

定义两个变量存储前一个节点和当前节点,遍历时当前节点指向前一个节点即可。

时间复杂度:O(n)
空间复杂度:O(1)

/** * 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 reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while (cur != null) { ListNode temp = cur.next; cur.next = pre; pre = cur; cur = temp; } return pre; } }

方法二:递归

改造一下方法一的循环即可。

时间复杂度:O(n)
空间复杂度:O(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 { public ListNode reverseList(ListNode head) { return reverseList(null, head); } public ListNode reverseList(ListNode pre, ListNode cur) { if (cur == null) { return pre; } ListNode temp = cur.next; cur.next = pre; return reverseList(cur, temp); } }
http://www.jsqmd.com/news/1198835/

相关文章:

  • 嵌入式面试高频考点精讲(一):内存管理与指针
  • C++位操作与bitset:从底层原理到高性能编程实战
  • 现代C++学习路线图:从核心基础到工程实践的全方位指南
  • K8S中部署高可用Prometheus集群的无坑实践
  • 激光测距技术演进:从经典三角法到现代FMCW与ToF的融合与挑战
  • ERP沙盘人机对抗:从零到一的六年稳健经营实战复盘
  • VRTK v4实战指南:基于Unity的VR交互开发与性能优化
  • AO3镜像站实用指南:三步解锁全球最大同人创作平台
  • (软件工程核心实践)需求分析:从“做什么”到“怎么做”的建模与沟通艺术
  • JetBrains IDE试用期重置终极指南:如何免费延长30天完整功能
  • 探秘OpenEuler系统信息工具osinfor:用Rust打造的轻量级系统架构与版本获取神器
  • AD绘制最小系统元件库实战笔记(一)
  • C++17全局new追踪器:内存管理诊断与性能优化实践
  • Cadence SPB17.4 - 从零构建企业级原理图标题栏模板
  • Java多线程结果获取:从阻塞等待到异步回调的演进之路
  • C++异步编程8大核心错误解析:从std::async到协程的实战避坑指南
  • 三相整流电路波形分析与工业应用实战
  • 004永磁电机散热设计:别再盯着二维热路图了,三维温度场仿真让你看清热点分布,不酷吗?
  • jiuwen-deepsearch性能调优:如何最大化搜索代理的效率
  • 丙午年六月初三秉性思
  • 从坐标系视角看机器人运动学:左乘与右乘的本质区别
  • 从“传球游戏”到“总线仲裁”:一文读懂I2C协议的核心机制与实战要点
  • 从UART到LIN:低成本汽车总线的协议实现与实战解析
  • OpenEuler开发者必备:使用osinfor提升系统信息获取效率的5个技巧
  • C++内存管理核心:常量、指针与new/delete实战详解
  • Kibana实战:从数据可视化到集群监控
  • 运放参数解析与实战选型指南
  • 深度解密:如何用RePKG高效解包Wallpaper Engine资源文件
  • 电子电路设计手记(一)——晶振选型与电路匹配实战
  • S32K144开发笔记6 - 软件SPI驱动MCP2515的CAN总线数据收发实战