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

leetcode_206 反转链表

1. 题意

原地反转链表,非常经典的一道题。

2. 解决

2.1 非递归

非递归的比较好理解;链表需要维护前驱后继两个信息,当我们要更改后继时,先要把原来的后继先存起来。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {// A->B->C// next = getNext;// cur->next = pre// pre = cur;// cur =  next;// //          pre//          |//          V//  null <- A    B->C // null <- A     ListNode *pre = nullptr;ListNode *cur = head;while ( cur ) {ListNode *nxt = cur->next;cur->next = pre;pre = cur;cur = nxt;}return pre;}};
2.2 递归

递归的比较难理解一些 。

由于返回的是翻转后的头节点,因此需要不断的递归到没有后继节点的最后一个节点, 它就是反转后链表的头节点了。

返回的链表的最后 一个节点是head->next , 将它的指向改成当前节点。同时我们还需要将当前节点的next域置空,否则无法将原先的头指空。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {// A->B->Cif ( head == nullptr || head->next == nullptr) {return head;}ListNode *newHead = reverseList( head->next );ListNode *newListTail = head->next;newListTail->next = head;head->next = nullptr;return newHead;}};

3. 参考

[lc206]

http://www.lqws.cn/news/194977.html

相关文章:

  • 【设计模式-5】设计模式的总结
  • 【办公类-104-01】20250606通义万相50分一天用完,通义万相2.1专业版测试
  • Guava LoadingCache 使用指南
  • Beckhoff(倍福)PLC 顺控程序转换条件解读
  • C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
  • 【Linux】Linux基础指令3
  • 三模冗余设计
  • 软件测试python学习
  • DDD架构实战 充血模型 电商订单
  • 筛选企业订单和业绩显著增长的标的
  • 低内聚高耦合的衡量指标
  • AI书签管理工具开发全记录(十三):TUI基本框架搭建
  • Python训练day40
  • robot_lab——rsl_rl的train.py整体逻辑
  • 西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?
  • 智谱清言沉思智能体,天工智能体,agenticSeek等AI Agent测试记录
  • 5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
  • 独家首发!低照度环境下YOLOv8的增强方案——从理论到TensorRT部署
  • caliper config.yaml 文件配置,解释了每个配置项的作用和注意事项
  • 基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南
  • 嵌入(Embedding)技术的实现原理与应用场景解析
  • 阿里开源千问3向量模型 超越Google与OpenAI
  • 六、【ESP32开发全栈指南:深入解析ESP32 IDF中的WiFi AP模式开发】
  • 数据结构与算法——并查集
  • DAX权威指南8:DAX引擎与存储优化
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 8】【高通蓝牙hal-进程被杀之前日志收集流程】
  • Redis学习笔记
  • 面向开发者的提示词工程④——文本推断(Inferring)
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月6日第100弹
  • 从入门到进阶:Python 学习参考书的深度解析