LeetCode热题100 反转链表

题目描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]

示例 2:

输入: head = [1,2]
输出: [2,1]

示例 3:

输入: head = []
输出: []

提示:

链表中节点的数目范围是 [0, 5000]

-5000 <= Node.val <= 5000

思路1:迭代

通过遍历直接修改指向即可。

代码1

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 * tail = nullptr;
        ListNode * cur = nullptr;
        while(head != nullptr)
        {
            // 保存下一个位置
            ListNode * cur = head->next;
            // 修改当前位置的指向
            head->next = tail;
            tail = head;
            // 获取下一个位置
            head = cur;
        }
        return tail;
    }
};

思路2:递归

我们可以通过递归的方式获取尾部指针,再进行倒置设置方向。

代码2

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) {
        // 递归获取尾部指针返回
        if(head == nullptr || head->next == nullptr) return head;
        ListNode *tail = reverseList(head->next);
        // 不是尾部的指针,需要修改指向的方向
        head->next->next = head;
        // 避免产生环
        head->next = nullptr;
        return tail;
    }
};
相关推荐
weixin_448119942 小时前
Datawhale 大模型算法全栈基础篇 202602第2次笔记
笔记·算法
青衫码上行2 小时前
高频SQL 50题 | 聚合
数据库·sql·mysql·leetcode·面试
weixin_448119942 小时前
Datawhale 大模型算法全栈基础篇 202602第3次笔记
笔记·rnn·算法
紫陌涵光2 小时前
538. 把二叉搜索树转换为累加树
c++·算法·leetcode
Zik----2 小时前
Leetcode35 —— 搜索插入位置(二分查找)
数据结构·算法·leetcode
yi.Ist2 小时前
牛客寒假训练营3
c++·学习·算法
24白菜头2 小时前
2026-2-23:LeetCode每日一题(动态规划专项)
笔记·学习·算法·leetcode·动态规划
小龙报2 小时前
【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.美国血统 American Heritage 2.二叉树问题
c语言·数据结构·c++·算法·深度优先·广度优先·宽度优先
啊阿狸不会拉杆2 小时前
《计算机视觉:模型、学习和推理》第 9 章-分类模型
人工智能·python·学习·算法·机器学习·计算机视觉·分类