题单地址:https://www.nowcoder.com/link/pc_kol_wsx
本系列将会从头到尾采取动画的形式细致的讲解所有的题目,每道题目都会结合动画、图片、详细的注释进行分析,确保每个人都能看懂。
一、题目描述
将一个结点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。
示例1
输入:
{1,2,3,4,5},2,4 |
返回值:
{1,4,3,2,5} |
二、题目解析
1、构建一个虚拟结点,让它指向原链表的头结点。
2、设置两个指针,pre 指针指向以 虚拟头结点为链表的头部位置,cur 指针指向 原链表的头部位置。
3、让着两个指针向前移动,直到 pre 指向了 第一个要反转的结点的前面那个结点,而 cur 指向了翻转区域里面的第一个结点。
4、开始指向翻转操作
- 1)、设置临时变量 temp,temp 是 cur 的 next 位置,保存当前需要翻转结点的后面的结点,我们需要交换 temp 和 cur
- 2)、让 cur 的 next 位置变成 temp 的下一个结点
- 3)、让 temp 的 next 位置变成 cur
- 4)、让 pre 的 next 位置变成 temp
三、参考代码
import java.util.*; |