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;
    }
};
相关推荐
Navigator_Z11 分钟前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode
未来之窗软件服务14 分钟前
递归时间复杂度演算T (n)=aT (n/b)+f (n)-东方仙盟
算法·仙盟创梦ide·东方仙盟
垆边人似月.37 分钟前
华为机考题:明明的随机数
数据结构·算法·华为
Doubbbbbbble云1 小时前
多维空间索引结构R树与KD树性能对比研究4
算法
海上小飞龙1 小时前
【KMP算法-中篇】next 数组的递推:往前填一位,靠的是往回退几步
算法
lusklusklusk1 小时前
Python 四大数据结构详解:元组、列表、集合、字典的特点与增删改查
数据结构·windows·python
keyipatience1 小时前
B树详解:从零构建平衡多路搜索树
数据结构·b树·算法·图搜索
FluxArt2 小时前
GPT Image 2.5 多图参考怎么用:Flux Art 生成与编辑教程
数据结构·gpt·算法
All for pursuit.2 小时前
【分治-2】215.数组中的第K个最大元素
数据结构·c++·算法·leetcode
CQU_JIAKE2 小时前
9.15【A】
算法·动态规划