【链表 - LeetCode】206. 反转链表【带ACM调试】

206. 反转链表 - 力扣(LeetCode)

题解

迭代版本

一共三个指针,一个是记录最开始的节点,一个是当前反转节点,一个是下一个待反转的节点。

记住这里是反转,所以,针对节点来看,将当前节点 cur 指向最开始节点,即完成反转。

然后所有指针往下走一步。

走的顺序是从前往后走,即最开始节点=当前反转节点,当前反转节点=下一个待反转节点。

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* prev = nullptr;
        ListNode* cur, * nxt;
        cur = head;
        while(cur){
            nxt = cur->next;
            cur->next = prev;
            prve = cur;
            cur = nxt;
        }
        return prev;
    }
};

反转链表 ACM 版本

加了输入输出以及相对应的初始化部分,更方便调试一些。

cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

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 *cur, *nxt;
        cur = head;
        while (cur)
        {
            nxt = cur->next;
            cur->next = prev;
            prev = cur;
            cur = nxt;
        }
        return prev;
    }
};

int main()
{
    ListNode *head = nullptr, *tail = nullptr;
    int x, n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        ListNode *tmp = new ListNode(x, nullptr);
        if (head == nullptr)
        {
            head = tail = tmp;
        }
        else
        {
            tail->next = tmp;
            tail = tmp;
        }
        cout << x << endl;
    }
    Solution solution;
    head = solution.reverseList(head);
    while (head)
    {
        cout << head->val << " ";
        head = head->next;
    }
    return 0;
}
相关推荐
悲伤小伞1 分钟前
LeetCode 热题 100_5-11. 盛最多水的容器
算法·leetcode·职场和发展
多加点辣也没关系2 分钟前
数据结构与算法|第十八章:动态规划(上)— 基础篇
数据结构·算法·动态规划
guo_xiao_xiao_2 分钟前
YOLOv11算法夜间机场跑道灯带目标检测数据集-900张-Airplane-1_5
算法·yolo·目标检测
Rabitebla4 分钟前
从零实现 C++ List:带头循环双向链表的每一个细节
数据结构·c++·算法·leetcode·链表·list
ZPC821011 分钟前
Linux / Ubuntu 隔离 CPU 核心 + ROS2 线程绑定
人工智能·算法·计算机视觉
学习3人组15 分钟前
柔性排产:局部秒级重排 算法规划+内部拆分目标 详细对照表
算法·mes
shehuiyuelaiyuehao17 分钟前
算法20,x的平方根
开发语言·python·算法
luoganttcc19 分钟前
冯诺依曼体系有一天会被打破吗
算法·架构
V搜xhliang024625 分钟前
【进阶篇】OpenClaw 高级技巧:定时任务 + 子 Agent + 自动化工作流
运维·人工智能·算法·microsoft·自动化
玛卡巴卡ldf38 分钟前
【LeetCode 手撕算法】(回溯)全排列DFS、子集、电话号码字母组合 九键、组合总和、括号生成、单词搜索、分割回文数
java·算法·leetcode·力扣