LeetCode206 反转链表

前言

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

思路

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

代码

方法一: 双指针法/迭代

我的理解是创建了三个指针,前中后各一个,进行滑动。先把 n e x t next next节点保存在后面的指针中,再把当前节点的 n e x t next next指针指向前面一个节点,然后一起平移这三个指针。

cpp 复制代码
/**
 * 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)

方法二: 递归

有点抽象,不是特别理解递归代表的具体含义,应该是封装了平移指针的操作。

cpp 复制代码
/**
 * 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 层。
相关推荐
Navigator_Z4 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
WL学习笔记5 小时前
C & C++ 内存管理
c++·c++内存管理
pride.li5 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
旺仔仔仔6 小时前
机器人项目实战(5):从单次抓取,到接收指令连续做事
算法
旺仔仔仔6 小时前
机器人项目实战(2):识别物体、提取点云,再到抓取姿态
算法
姜鱼问生6 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
启观川7 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
对空六课7 小时前
指标口径生效时间的版本查询实现
大数据·服务器·前端·算法·数据分析
对空六课7 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析
一勺思维7 小时前
我为什么把 Agent 的核心逻辑从 LangChain 里搬出来手写
算法