当前位置: 首页 > 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.xdnf.cn/news/899839.html

相关文章:

  • PDF转Markdown/JSON软件MinerU最新1.3.12版整合包下载
  • 元图CAD:一键解锁PDF转CAD,OCR技术赋能高效转换
  • 网络安全逆向分析之rust逆向技巧
  • 不到 2 个月,OpenAI 火速用 Rust 重写 AI 编程工具。尤雨溪也觉得 Rust 香!
  • 三十四、面向对象底层逻辑-SpringMVC九大组件之FlashMapManager接口设计哲学
  • C#学习第28天:内存缓存和对象池化
  • vscode使用系列之快速生成html模板
  • CANFD 数据记录仪在汽车售后解决偶发问题故障的应用
  • 浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
  • Python使用clickhouse-local和MySQL表函数实现从MySQL到ClickHouse数据同步
  • 全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
  • Spring Cloud 2025.0.0 Gateway迁移全过程详解
  • Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战
  • 开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus X和DeepSeek-R1打造个人知识库问答系统
  • 学习笔记(25):线性代数,矩阵-矩阵乘法原理
  • NoSQL子Redis哨兵
  • Android Test3 获取的ANDROID_ID值不同
  • logstash拉取redisStream的流数据,并存储ES
  • uni-app 项目支持 vue 3.0 详解及版本升级方案?
  • LangChain【8】之工具包深度解析:从基础使用到高级实践
  • Vue3 + UniApp 蓝牙连接与数据发送(稳定版)
  • FFmpeg 低延迟同屏方案
  • LeetCode 热题 100 74. 搜索二维矩阵
  • 计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结
  • LinkedBlockingQueue、ConcurrentLinkedQueue和ArrayBlockingQueue深度解析
  • 在 Kali 上打造渗透测试专用的 VSCode 环境
  • MDP的 Commands模块
  • Git 切换到旧提交,同时保证当前修改不丢失
  • 如何写高效的Prompt?