反转链表----递归注释

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (!head || !head->next) {
            return head;
        }
        ListNode* newHead = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return newHead;
    }

};
/*
递归原理:
以反转1 2 3 4 5为例
                                                                                 nullptr
1 2 3 4 5                                                                           ⬆
⬆                   newHead(1) = newHead(2) = head(5)                               1⬅2⬅3⬅4⬅5
head(1)             head(1)->next->next = head(1) 即 head(2)->next = head(1)                   ⬆
                    head(1)->next = nullptr                                                 newHead
                    return newHead(1) = head(5)
                                ⬆                                                   nullptr
1 2 3 4 5                                                                              ⬆
⬆                   newHead(2) = newHead(3) = head(5)                               1➡2⬅3⬅4⬅5
head(2)             head(2)->next->next = head(2) 即 head(3)->next = head(2)                   ⬆
                    head(2)->next = nullptr                                                 newHead
                    return newHead(2) = head(5)
                                ⬆                                                     nullptr
1 2 3 4 5                                                                                ⬆
⬆                   newHead(3) = newHead(4) = head(5)                               1➡2➡3⬅4⬅5
head(3)             head(3)->next->next = head(3) 即 head(4)->next = head(3)                   ⬆
                    head(3)->next = nullptr                                                 newHead
                    return newHead(3) = head(5)
                                ⬆                                                         nullptr
1 2 3 4 5                                                                                   ⬆
⬆ ➡                newHead(4) = head(5)                                            1➡2➡3➡4⬅5
head(4)             head(4)->next->next = head(4) 即 head(5)->next = head(4)                   ⬆
                    head(4)->next = nullptr                                                 newHead
                    return newHead(4) = head(5)
                                ⬆                                                             nullptr
1 2 3 4 5                                                                                       ⬆
⬆           ➡      head->next = nullptr                                             1➡2➡3➡4➡5
head(5)             return head(5)                                                              ⬆
                                                                                            newHead

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值