首先了解一下递归的正确打开方式:
- 找出临界值
- 找出最后一次和倒数第二次的关系
- 找出临界值
翻转后头变成了尾巴,所以最后的临界值head.next==null
,同时考虑空链表,所以临界值为head==null||head.next==null
,当head==null||head.next==null
时候,只需要将head
返回就行
if(head==null||head.next==null){
return head;
}
- 找出最后一次和倒数第二次的关系
下图为倒数第一次和导数第二次的关系图
想要将导数第二次变成导数第一次,需要head.next.next=head;
,并且head.next=null;
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)
}
}