解题思路
理解好反转的思路,理解好递归反转的作用
- 每一步需要做的动作
head.next.next = head
head.next = null
- 因为要返回最后一个节点,也就是新的头节点,那么基础条件是
head==null || head.next==null
第一个判断反之空指针异常,第二个判断是判断这个节点是否为最后一个节点了- 如果是,那么返回最后一个节点,然后按照定义进行反转
整体思路:
- 递归找到最后一个节点,返回最后一个节点
- 从最后一个节点开始,进行反转的动作
head.next.next = head; head.next=null
- 最后一直传递最后一个节点
return last;
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null || head.next==null) return head; //判断是否为null,即是否为最后一个节点元素了
ListNode last = reverseList(head.next);
head.next.next = head; // 重新指向后一个
head.next = null; // 进行破环操作
return last; // 返回最后一个节点,也就是新的头节点
}
}