算法打卡第一天 牛客BM2链表内指定区间反转

这篇博客介绍了如何在O(n)时间复杂度和O(1)空间复杂度下,对链表m到n位置的区间进行反转。作者通过双指针法,详细阐述了两次遍历链表的反转步骤,并强调使用虚拟头节点来简化问题处理。
摘要由CSDN通过智能技术生成

        今天是秋招算法打卡第一天,题目是链表内指定区间反转

        描述

        将一个节点数为 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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值