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

力扣: 反转链表

文章目录

  • 需求
  • 分析
  • 双指针法
  • 递归
  • 结尾

在这里插入图片描述


需求

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

示例1:
在这里插入图片描述

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

示例2:
在这里插入图片描述

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

示例 3:
输入:head = []
输出:[]


分析

初始化:我们使用两个指针,prev 和 current。prev 用来指向反转后的链表的前一个节点(初始时为 None),current 用来遍历原链表(初始时为 head)。

遍历链表

  • 先保存当前节点的下一个节点 next_node。
  • 将当前节点的 next 指针指向 prev,实现反转操作。
  • 更新 prev 为当前节点。
  • 更新 current 为 next_node,继续遍历。

返回新头节点:当 current 变为 None 时,prev 就是新链表的头节点,返回它即可。


双指针法

public ListNode reverseList(ListNode head) {if( head == null || head.next == null ){return head;}ListNode pre = null;ListNode cur = head;while( cur != null ){//  先把cur的下一个节点拿出来ListNode nextNode = cur.next;//  将 cur 的下一个指向前一个cur.next = pre;pre = cur;cur = nextNode;}   return pre;
}

执行结果:
在这里插入图片描述


递归

上面的代码很容易改写为递归的写法:

if( head == null || head.next == null ){return head;}return reverseList( null, head );
}private ListNode reverseList(ListNode pre, ListNode cur) {if( cur == null ){return pre;}//  拿出cur的下一个ListNode nextNode = cur.next;cur.next = pre;return reverseList( cur, nextNode );
}

递归终止条件:

if (cur == null):当遍历到链表的末尾时(即 cur 为 null),返回 pre,这是反转后新链表的头节点。

反转节点:
ListNode nextNode = cur.next;:保存当前节点的下一个节点,以便后续操作。
cur.next = pre;:将当前节点的 next 指针指向前一个节点 pre,这一步是反转指针的核心操作。

递归调用:
return reverseList(cur, nextNode);:调用自身,传入当前节点 cur 作为新的前一个节点,和保存的 nextNode 作为当前节点,以继续反转剩余的链表。

运行结果:

在这里插入图片描述


结尾

以上 是我对这道算法的一些遐想和延伸, 可能不是最优解, 但是算法的优化嘛 本身就是一个思索的过程, 能在这个思索和迭代的过程中有所收获和乐趣就是在成长了, 欢迎大家一起来交流更多的解答…


http://www.mrgr.cn/news/10542.html

相关文章:

  • 线程面试题
  • java springboot 集成activeMQ(保姆级别教程)
  • C++ | Leetcode C++题解之第372题超级次方
  • 饮水机复杂交互功能联网调试
  • 十六、栈和队列
  • 深度学习学习经验——变换器(Transformer)
  • MacOS 升级 Ruby 版本的操作与考量
  • 大数据技术之Zookeeper概述(1)
  • 何为MethodHandles?
  • 基于微信小程序靓丽内蒙古APP(源码+定制+辅导)
  • [C语言]-基础知识点梳理-动态内存管理
  • 最近云计算领域有哪些重大进展?
  • 汽车冷却液温度传感器的作用与检测方法
  • spring-security-oauth2授权服务原理
  • 101. 对称二叉树(递归法)
  • 【系统分析师】-WEB开发技术
  • CacheLoader和装饰器模式
  • MySQL集群技术
  • 更换域名后图片不显示
  • dubbo:dubbo+nacos整合springcloud gateway实现网关(三)