递归解法
递归的三大步骤:Base case + 拆解 + 组合
BaseCase
注意递归的终止条件一定要写对
if(node == null || node.next == null) {
return node;
}
拆解
递归的拆解就是把大问题,分解成小一点点的问题,直到 base case 可以返回,进行第三步的组合。
组合
组合的意思是,假设我们能够拿到小问题的解,那么用小问题的解去构造大问题的解。
这里很明显,在 2 后面接上 1 就行了。
但是怎么拿到 2 呢?
别忘了,原问题里,此时还有 1 指向 2 呢~
也就是 node1.next = node2,
然后把 2 指向 1:node2.next = node1
合起来就是:node1.next.next = node1
思路清楚就不绕,看着觉得绕的就是没想清楚哼~
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}
时空间复杂度都是o(n)