【链表 - 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;
}
相关推荐
Dlrb12119 小时前
数据结构-排序算法
数据结构·算法·排序算法·插入排序·堆排序·希尔排序·快速排序
过期动态9 小时前
【LeetCode 热题 100】无重复字符的最长子串
java·数据结构·spring boot·算法·leetcode·职场和发展
莫等闲-10 小时前
leetcode42. 接雨水 leetcode84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
unicrom_深圳市由你创科技10 小时前
历史数据存储量太大,怎么处理?数据压缩/归档策略?
算法
浅念-10 小时前
LeetCode 记忆化搜索 刷题总结
数据结构·算法·leetcode·职场和发展·深度优先·dfs
菜菜的顾清寒10 小时前
力扣HOT100(44)对称二叉树
数据结构·算法·leetcode
吃好睡好便好10 小时前
矩阵的左乘和右乘
人工智能·学习·线性代数·算法·matlab·矩阵
我命由我1234510 小时前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
月光刺眼10 小时前
🎶二分 · 双指针 · 滑动窗口 · 螺旋矩阵:数组算法四题拆解
javascript·算法
南境十里·墨染春水10 小时前
数据结构 —— 双向循环链表
数据结构·链表