每日leetcode——92. 反转链表 II
题目
【每日leetcode——92. 反转链表 II】给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]输入:head = [5], left = 1, right = 1
输出:[5]
思路 不要陷入206.反转链表的思维误区,206是反转全部链表,所以用递归的思想,一直到链表最后,注意力在链表最后,从后向前逐个反转。
本题的思路,注意力是放在前面:
例如,将 [2,3,4] 翻转,重点不应放在4上,而是放在开头2上,只需要不断将2后的那个节点移到它前面即可:2,(3),4 ——> (3),2,4 ——> 3,2,(4) ——> (4),3,2
def reverseBetween(head, left, right) -> ListNode:
# 设置虚拟节点,指向头节点
# 设置虚拟节点的目的是应对边界情况:原链表第一个节点就开始反转
dummy = ListNode(-1)
dummy.next = head# 初始化pre指针
pre = dummy# 移动pre指针到反转区的前一个节点
for i in range(left-1):
pre = pre.next# cur指针指向反转区的第一个节点,固定在这个节点上不动
cur = pre.next# pre到了反转区前一个节点,开始进行反转,例如pre,2,3,4
for j in range(right-left):
# 设置个tmp指针,指向cur的下一个节点
# pre,2(cur),3(tmp),4
tmp = cur.next
# cur指向tmp的下一个节点
# pre,2(cur),4
cur.next = tmp.next
# tmp指向pre的下一个节点
# 3(tmp),2(cur),4
tmp.next = pre.next
# pre指向tmp节点
# pre,3(tmp),2(cur),4
pre.next = tmpreturn dummy.next
推荐阅读
- [Golang]力扣Leetcode—剑指Offer—数组—04.二维数组中的查找
- Android系统编程入门系列之硬件交互——无线通信WLAN
- 国内互联网大厂面试问题和答案|2022秋招—阿里巴巴面试高频问题和答案
- JAVA学习日记|JAVA从零开始学习知识整理——HTML——day01—【HTML】
- 开源项目分享|Github项目分享——以程序员的视角看中国
- 从零开始学WEB前端|从零开始学WEB前端——网页的行为——JavaScript基础(1)
- Leetcode 704 二分查找
- VT|VT 入门篇——最小 VT 实现(上)
- 每日刷题———蓝桥杯真题|蓝桥杯2020第十一届C语言B组省赛习题题解——习题B.既约分数
- 日常杂谈|论在Windows中鱼与熊掌不可兼得性——该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置”页面中创