目录
- 前言
- 一、解题思路
- 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)指向后方的指针
3.断开正向指针
断开前一个数据(4)指向后一个数据数据(5)的指针,并指向null
4.递归
向前移动重复以上步骤
5.递归的具体过程
以上就是全部过程,接下来展示每次执行的过程
Tip:全部理解的,可以直接到代码实现
向前移动:
第一次:
创建逆向指针:
断开正向指针:
第二次:
创建逆向指针:
断开正向指针:
第三次:
创建逆向指针:
断开正向指针:
以上就是全部过程
二、代码实现
代码如下:
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.断开前一个数据指向后一个数据数据的指针,并指向nullhead.next = null;//5.返回反转后链表return newHead;
}