【链表 - 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;
}
相关推荐
CV爱数码6 分钟前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct
Rabitebla34 分钟前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
远离UE41 小时前
半拉格朗日学习笔记 动力学 实时渲染
人工智能·算法
小郎君6581 小时前
MPTT 不是万能编号:一棵百万节点树的增删改与批量事务
算法
FPGA小徐1 小时前
【一生一芯 / PA】AM 核心文件逐行解析(上):从 start.S 到 gpu.c
前端·算法
Tairitsu_H2 小时前
[动态规划#1] 子数组 | 最大子数组和 | 环形子数组的最大和 | 乘积最大子数组 | 乘积为正数的最长子数组
算法·动态规划
凯瑟琳.奥古斯特2 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
布莱克6053 小时前
A* 算法详解:从原理到实现
开发语言·c++·算法
段一凡-华北理工大学3 小时前
高炉炼铁机器视觉与智能识别十八讲~系列文章15:可靠性篇:防误报、容错与识别系统的鲁棒性设计
人工智能·算法·机器学习·高炉大模型·高炉机器视觉·高炉炼铁模型开发
某林2123 小时前
局部路径规划器 DWB:速度采样与评分权重的取值分析
人工智能·算法·架构·机器人·技术复盘