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        
相关推荐
我爱cope1 天前
【力扣hot100:76. 最小覆盖子串】
算法·leetcode·职场和发展
sheeta19981 天前
LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组
笔记·算法·leetcode
吃着火锅x唱着歌1 天前
LeetCode 962.最大宽度坡
算法·leetcode·职场和发展
凌波粒1 天前
LeetCode--257. 二叉树的所有路径(二叉树)
算法·leetcode·职场和发展
阿Y加油吧1 天前
两道数组算法题复盘:多数元素 & 颜色分类
算法·leetcode·职场和发展
And_Ii1 天前
LeetCode 026. 重排链表
算法·leetcode·链表
And_Ii1 天前
leetCode 146. LRU 缓存
python·链表
是娇娇公主~1 天前
力扣——146.LRU缓存详解
算法·leetcode·缓存
_深海凉_1 天前
LeetCode热题100-路径总和 III
算法·leetcode·职场和发展
YL200404261 天前
054实现Trie(前缀树)
数据结构·leetcode