链表反转【递归法】

目录

  • 前言
  • 一、解题思路
    • 1.找到链表的尾部两个数据(4、5)
    • 2.创建逆向指针
    • 3.断开正向指针
    • 4.递归
    • 5.递归的具体过程
      • 向前移动:
        • 第一次:
          • 创建逆向指针:
          • 断开正向指针:
        • 第二次:
          • 创建逆向指针:
          • 断开正向指针:
        • 第三次:
          • 创建逆向指针:
          • 断开正向指针:
  • 二、代码实现


前言

链表反转是一道非常热门的算法基础题,让我们来一起看一看这道题吧
本次解题使用的是递归法

描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL


一、解题思路

1.找到链表的尾部两个数据(4、5)

尾部

2.创建逆向指针

将后一个数据数据(5)的指针指向前一个数据(4),并断开后一个数据(5)指向后方的指针
链表反转【递归法】_第1张图片

3.断开正向指针

断开前一个数据(4)指向后一个数据数据(5)的指针,并指向null
链表反转【递归法】_第2张图片

4.递归

向前移动重复以上步骤

5.递归的具体过程

以上就是全部过程,接下来展示每次执行的过程

Tip:全部理解的,可以直接到代码实现

向前移动:

第一次:

链表反转【递归法】_第3张图片

创建逆向指针:

链表反转【递归法】_第4张图片

断开正向指针:

链表反转【递归法】_第5张图片

第二次:

链表反转【递归法】_第6张图片

创建逆向指针:

链表反转【递归法】_第7张图片

断开正向指针:

链表反转【递归法】_第8张图片

第三次:

链表反转【递归法】_第9张图片

创建逆向指针:

链表反转【递归法】_第10张图片

断开正向指针:

链表反转【递归法】_第11张图片
以上就是全部过程

二、代码实现

代码如下:

public ListNode reverseList(ListNode head) {
	//1.传入的参数的合法性 || 递归的终止条件
	if(head == null || head.next == null) {
		return head;
	}
	//2.递归
	ListNode newHead = reverseList(head.next);
	//3.将后一个数据数据的指针指向前一个数据,并断开后一个数据指向后方的指针
	head.next.next = head;
	//4.断开前一个数据指向后一个数据数据的指针,并指向null
	head.next = null;
	//5.返回反转后链表
	return newHead;
}

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