LeetCode 206 反转链表 - 递归解法

LeetCode 206 反转链表 - 递归解法

  1. 构造 json,显然key 是每个节点.
// 先是直接返回的, 找到特例: 5->null 返回还是 5->null
5->null:5->null, //直接返回的
3->4: 更深层次的调用,
2->3: 更深层次的调用
  1. 如何进行下一层调用. 对于3->4reverse(4)返回逆转 以4开头的单链表的头节点,那么reverse(3) 也就是本层调用的返回值一定和reverse(4)有联系,要不然怎么依赖下一层调用,reverse(4) 返回的单链表最后接本层的节点3 就是reverse(3)的返回值,
/**

 * 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) {
		//一般正常输入是不会传入null的, 这个判断只是迎合题目的测试用例
        if(head==nullptr){

            return head;

        }

        if(head->next ==nullptr){

            return head;

        }

        ListNode* last = reverseList(head->next);

        head->next->next = head;

        head->next =nullptr;

        return last;

    }

};