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

LeetCode206 反转链表

前言

题目: 206. 反转链表
文档: 代码随想录——反转链表
编程语言: C++
解题状态: 有了思路以后没敢尝试

思路

需要注意的是创建指针不会申请额外的内存空间。

代码

方法一: 双指针法/迭代

我的理解是创建了三个指针,前中后各一个,进行滑动。先把 n e x t next next节点保存在后面的指针中,再把当前节点的 n e x t 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) {ListNode* tmp;ListNode* cur = head;ListNode* pre = nullptr;while (cur) {tmp = cur -> next;cur -> next = pre;pre = cur;cur = tmp;}return pre;}
};
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(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* reverse(ListNode* pre, ListNode* cur) {if (cur == nullptr) return pre;ListNode* tmp = cur -> next;cur -> next = pre;return reverse(cur, tmp);}ListNode* reverseList(ListNode* head) {return reverse(nullptr, head);}
};
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n),空间复杂度主要取决于递归调用的栈空间,最多为 n 层。
http://www.lryc.cn/news/406353.html

相关文章:

  • nginx通过nginx_upstream_check_module实现后端健康检查
  • FastGPT 知识库搜索测试功能解析(二)
  • 双向链表<数据结构 C版>
  • react18+
  • rk3568 OpenHarmony4.1 Launcher定制开发—桌面壁纸替换
  • MySQL:送分or送命 varchar(30) 与 int(10)
  • 【odoo17】后端py方法触发右上角提示组件
  • 1775D - Friendly Spiders
  • 【python】OpenCV—Point Polygon Test
  • 6 Go语言的常量、枚举、作用域
  • 第十一章 数据结构
  • LeetCode704 二分查找
  • [言简意赅] Matlab生成FPGA端rom初始化文件.coe
  • 【QAC】分布式部署下其他机器如何连接RLM
  • 从等保测评看行业安全趋势:洞察与预测
  • HTTP模块(二)
  • 引入缓存带来的问题以及解决方案
  • 力扣39题:组合总和的 Java 实现
  • 使用el-table实现自动滚动
  • Angular由一个bug说起之八:实践中遇到的一个数据颗粒度的问题
  • day13(DNS域名解析)
  • uboot的mmc partconf命令
  • 数据结构经典测题3
  • tensorboard add_text() 停止自动为尖括号标记添加配对的结束括号</>
  • sql-libs通关详解
  • 【STM32】当按键具有上拉电阻时GPIO应该配置什么模式?怎么用按键去控制LED翻转?
  • EXO-chatgpt_api 解释
  • 新能源汽车的充电网络安全威胁和防护措施
  • Linux中利用消息队列给两个程序切换显示到前台
  • C语言实例-约瑟夫生者死者小游戏