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;

完毕。

相关推荐
tankeven27 分钟前
HJ93 数组分组
c++·算法
Σίσυφος190035 分钟前
LM 在 PnP(EPnP / P3P)的应用
算法
陈天伟教授36 分钟前
人工智能应用- 人工智能交叉:01. 破解蛋白质结构之谜
人工智能·神经网络·算法·机器学习·推荐算法
LightYoungLee1 小时前
General-behavior interview tutorials
算法
I_LPL2 小时前
day34 代码随想录算法训练营 动态规划专题2
java·算法·动态规划·hot100·求职面试
We་ct2 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:题解与思路解析
前端·算法·leetcode·链表·typescript
万象.2 小时前
redis集群算法,搭建,故障处理及扩容
redis·算法·哈希算法
plus4s2 小时前
2月19日(85-87题)
c++·算法
Desirediscipline3 小时前
cerr << 是C++中用于输出错误信息的标准用法
java·前端·c++·算法
Renhao-Wan3 小时前
Java 算法实践(八):贪心算法思路
java·算法·贪心算法