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;

完毕。

相关推荐
cccc楚染rrrr13 分钟前
572. 另一棵树的子树
java·数据结构·算法
精神病不行计算机不上班25 分钟前
[Java]泛型(二)泛型方法
java·python·算法
闻缺陷则喜何志丹38 分钟前
【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027
c++·算法·leetcode·动态规划·最佳·球队·无矛盾
hamster20211 小时前
力扣【501. 二叉搜索树中的众数】Java题解
java·算法·leetcode
Kevin Kou2 小时前
编程题-三数之和(中等)
数据结构·c++·算法
gentle_ice3 小时前
leetcode——排序链表(java)
java·leetcode·链表
Stanford_11063 小时前
C++中常用的排序方法之——冒泡排序
java·学习·算法·微信小程序·排序算法·微信公众平台·微信开放平台
小菜鸟博士4 小时前
手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)
网络·人工智能·深度学习·学习·算法·stable diffusion
程序趣谈4 小时前
算法随笔_30: 去除重复字母
数据结构·python·算法