首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【链表 - LeetCode】206. 反转链表【带ACM调试】

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

作者头像
Lokinli
发布2025-08-25 08:16:59
发布2025-08-25 08:16:59
2080
举报
文章被收录于专栏:以终为始以终为始

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

题解

迭代版本

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

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

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

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

代码语言:javascript
复制
/**
 * 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 版本

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

代码语言:javascript
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题解
    • 迭代版本
  • 反转链表 ACM 版本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档