今天是秋招算法打卡第一天,题目是链表内指定区间反转
描述
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。
数据范围: 链表长度 0 < size≤1000,0 < m ≤ n ≤size,链表中每个节点的值满足 |val| ≤ 1000。
要求:时间复杂度 O(n) ,空间复杂度 O(n)
进阶:时间复杂度 O(n),空间复杂度 O(1)
题解1:
双指针(两次遍历)
思路步骤:
-
要反转局部链表,可以将该局部部分当作完整链表进行反转
-
再将已经反转好的局部链表与其他节点建立连接,重构链表
-
建议使用虚拟头节点的技巧,可以避免对头节点复杂的分类考虑,简化操作。
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next