206. 反转链表-递归反转链表
解题思路
-
基本情况处理: 开始时,首先检查链表是否为空或只包含一个节点。若是,直接返回原链表头部。
-
递归调用: 对于包含两个或更多节点的链表,将递归调用 reverseList 方法,处理链表的第二个节点及其后续节点。递归的终止条件是到达链表的末尾,即节点为 null。
-
反转节点连接关系: 在递归的过程中,每一级递归都负责反转相邻的两个节点。具体操作包括:
-
递归调用 reverseList 获取当前节点之后链表的反转结果。
将当前节点的下一个节点的 next 指针指向当前节点,实现反转操作。
将当前节点的 next 指针置为 null,作为新的尾节点,防止循环指向。
返回结果: 最终返回反转后链表的新头节点,即递归的最深一层返回的节点。
/*** 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;}ListNode last = reverseList(head.next);// 翻转N- 1个节点head.next.next = head;// 将后面反转之后的链表指向Headhead.next = null;// 作为新的尾节点return last;}
}