206. 反转链表-递归反转链表

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;// 将后面反转之后的链表指向Head


        head.next = null;// 作为新的尾节点

        return last;
    }
}

你可能感兴趣的:(#,Leetcode,链表,数据结构)