Leetcode刷题日记-206. 反转链表-(递归详解)

Leetcode刷题日记-206. 反转链表-(递归详解)_第1张图片

首先了解一下递归的正确打开方式:

  1. 找出临界值
  2. 找出最后一次和倒数第二次的关系
    Leetcode刷题日记-206. 反转链表-(递归详解)_第2张图片
  1. 找出临界值

翻转后头变成了尾巴,所以最后的临界值head.next==null,同时考虑空链表,所以临界值为head==null||head.next==null,当head==null||head.next==null时候,只需要将head返回就行

if(head==null||head.next==null){
    return head;
}
  1. 找出最后一次和倒数第二次的关系

下图为倒数第一次和导数第二次的关系图
Leetcode刷题日记-206. 反转链表-(递归详解)_第3张图片
想要将导数第二次变成导数第一次,需要head.next.next=head;,并且head.next=null;
Leetcode刷题日记-206. 反转链表-(递归详解)_第4张图片

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode res = reverseList(head.next); 调用导数第二次结果,并将其改造成导数第一次结果
        head.next.next=head;
        head.next=null;
        return res; 返回改造后的结果就是reverseList(head)
    }
}

你可能感兴趣的:(刷题日记)