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

LeetCode 力扣 热题 100道(九)反转链表(C++)

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

方法一:迭代法

/*** 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) {ListNode* prev = nullptr;  // 前一个节点ListNode* curr = head;    // 当前节点while (curr != nullptr) {ListNode* next = curr->next;  // 保存下一个节点curr->next = prev;           // 反转当前节点的指针prev = curr;                 // 移动 prev 到当前节点curr = next;                 // 移动 curr 到下一个节点}return prev;  // 返回新的头节点}
};
算法步骤:
  1. 初始化两个指针:
    • prev 指向 nullptr,表示当前节点的前驱。
    • curr 指向链表头节点 head
  2. 遍历链表:
    • 保存当前节点的下一个节点 next
    • 将当前节点的 next 指向 prev,完成反转。
    • 移动 prevcurr 指针到下一个节点。
  3. currnullptr 时,链表已反转,prev 即为新链表的头节点。
  4. 返回 prev

方法二:递归法

class Solution {
public:ListNode* reverseList(ListNode* head) {// 递归终止条件if (head == nullptr || head->next == nullptr) {return head;}// 反转剩余链表ListNode* reversedHead = reverseList(head->next);// 调整当前节点的指针head->next->next = head;head->next = nullptr;return reversedHead;  // 返回新的头节点}
};
算法步骤:
  1. 递归终止条件:当前节点为 nullptr 或下一个节点为 nullptr(即到达链表尾部)。
  2. 递归反转剩余链表:
    • 让新链表的头节点 reversedHead 指向 head->next 反转后的链表头。
  3. 调整指针:
    • head->next->next 指向 head,将当前节点追加到反转链表尾部。
    • 设置 head->next = nullptr,断开当前节点和其余节点的连接。
  4. 返回 reversedHead
http://www.lryc.cn/news/490156.html

相关文章:

  • Linux之网络基础
  • Oracle收缩表空间的简单方法
  • C++设计模式行为模式———中介者模式
  • YB2503HV:高效率降压IC,助力电动车、太阳能设备等领域的能源转换
  • 如何使用Jest测试你的React组件
  • 微网能量管理研究
  • Java基础面试题02:简述什么是值传递和引用传递?
  • 【STL】10.set与map的模拟实现
  • Playwright(Java版) - 8: Playwright 元素交互的高级应用
  • 播放器开发之ffmpeg 硬件解码方案
  • n、nvm、nrm、pnpm、yarn各种指令大全
  • 数据库管理-根据日期字段进行数据筛选更新数据
  • 03. 运算符
  • 【最优清零方案——贪心+滑动窗口+线段树】
  • 一个点绕任意点旋转后的点的坐标
  • 大数据面试题每日练习--HDFS是如何工作的?
  • Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为
  • Java AIO(NIO.2)
  • Flink 常用问题及常用配置(有用)
  • RocketMQ: 消息过滤,通信组件,服务发现
  • linux ubuntu的脚本知
  • HTTP有哪些风险?是怎么解决的?
  • 3.12MayBeSomeLinearAlgebra
  • 学习日志015--python单链表
  • 如何在Windows右键新建菜单中添加自定义项
  • Spring Boot 3.0废弃了JavaEE,改用了Jakarta EE
  • pdf文档动态插入文字水印,45度角,旋转倾斜,位于文档中央,多行水印可插入中文
  • [ 渗透测试面试篇-2 ] 针对大规模资产的攻击思路
  • 深入解析 Web 应用中的 CHIPS(Partitioned Cookie Attribute)
  • 从搭建uni-app+vue3工程开始