leetcode 206反转链表

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 *pre = nullptr;
        ListNode *cur = head;
        while(cur !=nullptr){
            ListNode *next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
};

这题是反转单链表,核心用三个指针:

复制代码
pre   // 前一个节点
cur   // 当前节点
next  // 下一个节点

核心四步:

复制代码
ListNode *next = cur->next; // 1. 保存下一个
cur->next = pre;            // 2. 当前指针反转
pre = cur;                  // 3. pre 前进
cur = next;                 // 4. cur 前进

一句话记忆:

保存后面 → 指针反转 → pre 前进 → cur 前进

最容易错的点是最后:

复制代码
return pre;

不能写:

复制代码
return cur;

因为循环结束时:

复制代码
cur == nullptr

pre 才指向反转后链表的新头节点。

例如:

复制代码
1 → 2 → 3 → nullptr

反转后:

复制代码
3 → 2 → 1 → nullptr

复杂度:

\ \\boxed{时间复杂度 O(n)} \\\ \\boxed{空间复杂度 O(1)} \\

相关推荐
@MMiL18 分钟前
ST-link与J-link通俗易懂讲解
算法
RAOY的AI笔记20 分钟前
GPT-6打破孪生素数猜想最新纪录:AI正在进入数学研究新时代?
人工智能·gpt·算法
Nil20831 分钟前
leetcode 994腐烂的橘子
算法·leetcode·职场和发展
闻缺陷则喜何志丹35 分钟前
【动态规划】P10726 [GESP202406 八级] 空间跳跃|普及+
c++·算法·动态规划·洛谷
地平线智能驾驶开发者1 小时前
模型量化入门:从浮点模型到低比特表示
算法·量化·算法工具链
地平线开发者1 小时前
模型量化入门:从浮点模型到低比特表示
算法
枫叶林FYL1 小时前
【群体智能集群控制工程实践】第10章 无人舰队核心功能实现
大数据·人工智能·算法
不会就选b2 小时前
【无标题】
算法
m0_739312872 小时前
【自动驾驶和机器人控制】万向锁(Gimbal Lock)原理详解 + 和欧拉角 / 四元数 / SO(3)对比
算法·机器人·自动驾驶
Felven2 小时前
A. Eating Game
算法