Leetcode206.反转链表(HOT100)

链接:

我的代码:

cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* p = head;
        ListNode*res = new ListNode(-1);
        while(p){
            ListNode*k = res->next;
            res->next = p;
            p = p->next;
            res->next->next = k;
        }
        return res->next;
    }
};

我用的是迭代实现。

更好的代码:

cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(!head)return nullptr;
        ListNode* a = head,*b = head->next;
        while(b){
            ListNode*c = b->next;
            b->next = a;
            a = b;
            b = c;
        }
        head->next = nullptr;
        return a;
    }
};

第一步:

第二步:

最后一步:

此时,别忘了,head仍然指向原来的头结点,这个头结点现在是尾节点了,所以把它的next置空。

更好的代码(递归实现):

cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(!head||!head->next)return head;
        auto tail = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return tail;
    }
};

图示:

上图是head->next->next = head;

完毕。

相关推荐
历程里程碑1 分钟前
滑动窗口------滑动窗口最大值
大数据·python·算法·elasticsearch·搜索引擎·flask·tornado
Mr_Xuhhh2 分钟前
C语言字符串与内存操作函数模拟实现详解
java·linux·算法
B站_计算机毕业设计之家4 分钟前
AI大模型:Deepseek美食推荐系统 机器学习 协同过滤推荐算法+可视化 Django框架 大数据毕业设计(源码)✅
python·算法·机器学习·数据分析·django·推荐算法·美食
小草cys6 分钟前
基于大模型的图像目标检测及跟踪算法
人工智能·算法·目标检测
Tingjct14 分钟前
【C语言实现堆的TOPK问题】——海量数据中怎么找前K大(小)?
数据结构
代码游侠18 分钟前
C语言核心概念复习(三)
开发语言·数据结构·c++·笔记·学习·算法
池央24 分钟前
贪心算法-递增的三页子序列
算法·贪心算法
lrh12280024 分钟前
详解K近邻(KNN)算法:原理、实现与优化
算法·机器学习
程途拾光15833 分钟前
算法公平性:消除偏见与歧视的技术探索
大数据·人工智能·算法
秋风战士34 分钟前
无线通信算法之340:信道均衡除法定标讨论
算法·fpga开发·信息与通信