【链表 - 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;
}
相关推荐
NAGNIP3 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队3 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja8 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下8 小时前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶8 小时前
算法 --- 字符串
算法
博笙困了8 小时前
AcWing学习——差分
c++·算法
NAGNIP9 小时前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP9 小时前
大模型微调框架之LLaMA Factory
算法
echoarts9 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客9 小时前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法