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

单链表反转:Python/Java/C++三解

LeetCode206

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

示例一

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

Python解法

1.数组翻转

class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: if not head: return None temp = [] while head: temp.append(head.val) head = head.next dummy = ListNode() p = dummy for num in reversed(temp): p.next = ListNode(num) p = p.next return dummy.next

2.迭代(原地翻转)

class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: pre = None cur = head while cur: # 先保存下一个节点,防止断链 nxt = cur.next # 翻转当前节点指向 cur.next = pre # 双指针后移 pre = cur cur = nxt # pre最后是新头节点 return pre

3.递归

class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: # 终止条件:空节点/最后一个节点 if not head or not head.next: return head # 递归拿到后半段反转后的头 new_head = self.reverseList(head.next) # 翻转当前节点与后节点的指针 head.next.next = head head.next = None return new_head

Java解法(只展示后两种)

1.迭代

class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while (cur != null) { ListNode nxt = cur.next; // 暂存下一个 cur.next = pre; // 反转指向 pre = cur; // pre后移 cur = nxt; // cur后移 } return pre; } }

2.递归

class Solution { public ListNode reverseList(ListNode head) { // 终止:空 / 最后一个节点 if (head == null || head.next == null) { return head; } ListNode newHead = reverseList(head.next); head.next.next = head; // 后节点指向自己 head.next = null; // 切断原正向指针 return newHead; } }

C++解法

1.迭代

class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* pre = nullptr; ListNode* cur = head; while (cur) { ListNode* nxt = cur->next; cur->next = pre; pre = cur; cur = nxt; } return pre; } };

2.递归

class Solution { public: ListNode* reverseList(ListNode* head) { if (!head || !head->next) { return head; } ListNode* newHead = reverseList(head->next); head->next->next = head; head->next = nullptr; return newHead; } };
http://www.jsqmd.com/news/1099604/

相关文章:

  • 保姆级教程:用Halcon的Socket算子5分钟搞定机器视觉与PLC的TCP通讯
  • 简单选择排序算法
  • 2026年本地部署的AI数字人直播系统 Top5 实测
  • 独立开发推荐安装的skills
  • WS2812FX使用过程中的疑惑点记录
  • OpenClaw 核心组件全解:Gateway、Agent、Skills、Memory 的职责与协作关系
  • LeetCode 32 最长有效括号:python3 题解
  • Linux入门实践作业(一)
  • AI教材生成秘籍:低查重AI写教材,快速产出优质教材书稿!
  • ArkUI 底部操作栏及卡片整体美化布局开发
  • 参考文献格式乱如麻?高校导师推荐这几个AI论文写作工具
  • 从“工作记忆”到“资源博弈”:AI Agent 的 Context Window 为何是最核心的工程约束?
  • 示波器 CAN 总线波形解读与 CAN 通信观测实操
  • 【无标题】当工具返回 50KB 结果时发生了什么?—— OpenClaw 处理大工具输出的工程实践
  • 【题解-信息学奥赛一本通】1228:书架
  • 第一单元:在 Kotlin 中创建和使用函数
  • 20260630 - 看门狗
  • 垃圾自动分类技术:从AI识别到机械分拣的工程实践与选型指南
  • 谷歌研究院打造“论文助手工具“,AI审稿时代正在悄然开启
  • 王建:GEO的效果与信源密不可分 企业不要再一味追求“效率”
  • 【实证分析】地级市互联网综合发展指数(2003-2024年)
  • ArkTS 双向绑定输入框代码完整详解和 个人信息卡片代码完整详解(ArkTS)
  • Agent Skill 学习笔记
  • LeetCode 902 最大为 N 的数字组合:python3 题解
  • 基于.NET AgentFramework开发OpenClaw智能体框架
  • OpenClaw Ubuntu 部署经验总结
  • Go语言面试遇到,面试官问什么是协程、什么是协程泄漏和数组跟切片是用该如何回答
  • 深入浅出理解卷积的概念
  • GESP2026年6月认证C++三级( 第三部分编程题(1、加密))精讲
  • 仅限高级运维查看:VMware跨主机磁盘共享映射的3层隔离机制(含vSAN与NFS混合场景避坑清单)