leetcode 92. 反转链表 II 区间反转(不是整条链表反转)

  1. 找到区间的pre、left、right、nxt,保存
  2. 区间反转
  3. pre.next 连接新头(right)
  4. 区间尾巴(原来的left)接上nxt
python 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:

        # 1. 找区间的pre、next 节点

        pre = ListNode(0)
        pre.next = head
        dummy = pre

        for i in range(left-1):
            pre = pre.next
        # 此时pre.next = 区间头节点
        left_node = pre.next

        right_node = head
        for i in range(right-1):
            right_node = right_node.next

        # 2. 反转区间
        cur = left_node

        # 断首尾
        prev = ListNode(0)
        prev.next = left_node   # 给个暂时的节点,指向区间left
        nxt = right_node.next    # 保存原始区间next

        while cur != nxt:  # 结束时cur已经出区间了,这样区间内才反转完
            tmp = cur.next  # 保存原始区间next
            cur.next = prev
            prev = cur
            cur = tmp

        pre.next = right_node  # 原来的区间pre_node 指向原来的尾节点(现在的left)
        left_node.next = nxt  # 现在的尾节点(原来的left)指向保存好的nxt

        return dummy.next        
相关推荐
血小板要健康3 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
a187927218313 小时前
【算法】回溯算法(三):三记重锤与 N 皇后——记忆化、状态设计与三层漏斗
算法·leetcode·go·剪枝·回溯·n皇后·算法讲解
青 春 记 忆5 小时前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
wuyk5557 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
-dzk-7 小时前
【链表】LC 138.随机链表的复制
数据结构·链表
洋不写bug8 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
heima20169 小时前
长期复盘:拼团活动链接开发公司的行业现状与困境洞察
链表
mmmmath_310 小时前
面试题 02.07. 链表相交
算法·链表
圣保罗的大教堂10 小时前
leetcode 3903. 最小稳定下标 I 简单
leetcode
sylviiiiiia10 小时前
Leetcode hot100 多数元素/相交链表/反转链表
算法·leetcode·链表