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;

完毕。

相关推荐
信奥卷王3 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵3 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG5 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
码完就睡5 小时前
数据结构——红黑树
数据结构
码爸5 小时前
数据结构详细介绍
数据结构
Navigator_Z5 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛6 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记6 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序6 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm