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;

完毕。

相关推荐
Heisenberg~17 分钟前
详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)
c语言·数据结构·排序算法
陈奕迅本讯17 分钟前
数据结构-堆排序笔记
数据结构·笔记
无限大.39 分钟前
力扣题解3243 新增道路查询后的最短距离 I
算法·leetcode·职场和发展
棋子入局39 分钟前
螺旋矩阵II(leetcode 59)
算法·leetcode·矩阵
A Man Of Mould40 分钟前
【数据结构】——单链表
数据结构·链表
subject625Ruben1 小时前
随机森林(Random Forest, RF)筛选回归数据(处理异常值)
算法·随机森林·数学建模·回归
IU宝1 小时前
类和对象——static 成员,匿名对象(C++)
开发语言·c++·算法
jjyangyou2 小时前
物联网核心安全系列——智能汽车安全防护的重要性
算法·嵌入式·产品经理·硬件·产品设计
我明天再来学Web渗透2 小时前
【java基础】微服务篇
java·开发语言·数据结构·算法·leetcode·微服务·面试
ruangongtaotao2 小时前
举例理解LSM-Tree,LSM-Tree和B+Tree的比较
数据结构