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

链表反转示例代码

下面是 Java 实现链表反转的示例代码,包含迭代和递归两种方式:

public class LinkedListReverse {// 定义链表节点结构static class ListNode {int val;ListNode next;ListNode(int x) { val = x; }}// 方法1:迭代反转链表public static ListNode reverseListIterative(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode nextTemp = curr.next; // 保存下一个节点curr.next = prev;              // 当前节点指向前驱prev = curr;                   // 前驱后移curr = nextTemp;               // 当前节点后移}return prev; // 返回新头节点}// 方法2:递归反转链表public static ListNode reverseListRecursive(ListNode head) {if (head == null || head.next == null) {return head;}ListNode newHead = reverseListRecursive(head.next);head.next.next = head;  // 反转指针head.next = null;       // 断开原连接return newHead;         // 返回新头节点}// 辅助方法:打印链表public static void printList(ListNode head) {ListNode curr = head;while (curr != null) {System.out.print(curr.val + " -> ");curr = curr.next;}System.out.println("null");}public static void main(String[] args) {// 创建链表 1->2->3->4->5ListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3);head.next.next.next = new ListNode(4);head.next.next.next.next = new ListNode(5);System.out.println("原始链表:");printList(head);// 迭代反转ListNode reversedIterative = reverseListIterative(head);System.out.println("迭代反转后:");printList(reversedIterative);// 递归反转(需要先重建原链表)head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3);head.next.next.next = new ListNode(4);head.next.next.next.next = new ListNode(5);ListNode reversedRecursive = reverseListRecursive(head);System.out.println("递归反转后:");printList(reversedRecursive);}
}    

代码解释:

  1. 迭代方法reverseListIterative):

    • 使用三个指针 prevcurrnextTemp 遍历链表。
    • 每次迭代将当前节点的 next 指向前驱节点,逐步反转整个链表。
    • 时间复杂度:O(n),空间复杂度:O(1)。
  2. 递归方法reverseListRecursive):

    • 先递归反转后续节点,再处理当前节点。
    • 将当前节点的下一节点的 next 指向当前节点,实现反转。
    • 时间复杂度:O(n),空间复杂度:O(n)(递归栈空间)。
  3. 测试示例

    • 创建链表 1->2->3->4->5,分别用两种方法反转并打印结果。

两种方法都能有效反转链表,迭代法适合大规模数据,递归法更简洁但可能导致栈溢出。

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

相关文章:

  • 每日算法刷题Day27 6.9:leetcode二分答案2道题,用时1h20min
  • 论文解析:一文弄懂U-Net(图像分割)!
  • WEB3全栈开发——面试专业技能点P5中间件
  • 华为智选携手IAM:突破技术边界,重塑智慧健康家居新时代
  • 苍穹外卖|学习笔记|day07
  • C#学习第29天:表达式树(Expression Trees)
  • 俩人相向而行,何时相遇问题思考。
  • 《创始人IP打造:知识变现的高效路径》
  • EXCEL 实现“点击跳转到指定 Sheet”的方法
  • 《Minio 分片上传实现(基于Spring Boot)》
  • 第三章 3.2 无线传感器网络的组成
  • 本周黄金想法
  • yaml读取写入常见错误 (‘cannot represent an object‘, 117)
  • STM32ADC模数转换器,让你的32可以测量电压!!!
  • Mobile ALOHA全身模仿学习
  • MyBatis-Plus 常用条件构造方法
  • 什么是WBS项目管理?wbs项目管理有哪些核心功能?
  • 生产管理系统开发:专业软件开发公司的实践与思考
  • linux驱动开发(3)-页面分配器
  • C++模版初阶
  • deepseek: 重装系统
  • 【C/C++】玩转正则表达式
  • SQL-labs通关(23-38)
  • 使用VMware克隆功能快速搭建集群
  • 前端大文件分片上传详解 - Spring Boot 后端接口实现
  • 《机器学习》(周志华)第二章 模型评估与选择
  • 基于cornerstone3D的dicom影像浏览器 第三十一章 从PACS服务加载图像
  • 人工智能新纪元:技术跃迁、行业变革与未来挑战
  • python正则表达式
  • 【自动控制原理】分析和设计控制系统的性能(*^▽^*)