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;
    }
};
相关推荐
x_yeyue13 分钟前
三角形数
笔记·算法·数论·组合数学
Mr. zhihao1 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路1 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星1 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑1 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光2 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩2 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494732 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ4 小时前
单词拆分----dp
算法
智者知已应修善业4 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机