【Java练习题第二期】:用Java实现链表内指定区域的反转

hi~本期是Java题目分享
小猪做了一个对于新手挺有挑战性的题目,题目难度中等,也很有意思,但也想了我好一会儿>︿<
索性就分享一下,希望对你们有帮助

在这里插入图片描述

前言

本题是我本人自己的思考后所做,如果哪里有错误,请求大佬指出来(^-^)(^-^)!
在这里插入图片描述

题目:链表内指定区域反转

描述:
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。
例如:
给出的链表为 1\to 2 \to 3 \to 4 \to 5 \to NULL1→2→3→4→5→NULL, m=2,n=4m=2,n=4,
返回 1\to 4\to 3\to 2\to 5\to NULL1→4→3→2→5→NULL.

数据范围: 链表长度 0 < size \le 10000<size≤1000,0 < m \le n \le size0<m≤n≤size,链表中每个节点的值满足 |val| \le 1000∣val∣≤1000
要求:时间复杂度 O(n)O(n) ,空间复杂度 O(n)O(n)
进阶:时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)

图形解析

第一步:

为了让反转从头节点开始,可以在链表头加上一个虚拟节点当作第一个节点,head依旧是该虚拟节点的下一个节点,此时保证了第一个节点永远不会被反转。
图:
在这里插入图片描述

第二步:实现过程

第一次反转(动图):

在这里插入图片描述

第二次反转(动图):

在这里插入图片描述有几次反转取决于n-m的值。

代码:

在这里插入图片描述

文字解析

(1)需要一个虚拟头节点
(2)使prev永远在m-1的位置不变
(3)cur在prev的下一个,还需要知道cur的下一个,也就是curNext
(4)反转主要目的是使得m位置的和m+1位置的互换,进行n-m次

那本期博客就到此结束了哈!

在这里插入图片描述

如果上面有不懂的可以私我哈,小猪永远在线!!
如果你觉得对你有帮助的或者写的可以的可以给小猪一个小小的三连鼓励一下小猪哦!谢谢啦!
别忘了关注小猪哦!小猪带你一起玩遍Java和嵌入式
那咱们下期再见啦!

请添加图片描述

  • 43
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱撸猫的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值