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;

完毕。

相关推荐
cjr_xyi8 小时前
AT1202Contest_c binarydigit 题解
c语言·c++·算法
atunet8 小时前
从算法优化到系统加速的多层级思考7
算法
夜不会漫长9 小时前
数据结构:链表
数据结构·链表
Navigator_Z9 小时前
LeetCode //C - 1156. Swap For Longest Repeated Character Substring
c语言·算法·leetcode
Reart9 小时前
Leetcode 1143.最长公共子序列(720)
后端·算法
无相求码9 小时前
const vs #define:C语言常量定义的差异
c语言·算法
先吃饱再说10 小时前
LeetCode 226. 翻转二叉树
算法
剑锋所指,所向披靡!10 小时前
数据结构之关键路径
数据结构·算法
阿宇的技术日志10 小时前
漏桶、令牌桶、滑动窗口 三限流算法理解
算法·滑动窗口·漏桶·令牌桶
笨笨饿10 小时前
101_详解USB协议
java·jvm·数据结构