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        
相关推荐
祖力5515 小时前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表
旖旎夜光20 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
Navigator_Z1 天前
LeetCode //C - 1192. Critical Connections in a Network
c语言·算法·leetcode
rannn_1111 天前
【力扣hot100】链表专题下|138、148、23、146
java·算法·leetcode·链表·开发
hanlin031 天前
刷题笔记:力扣第189题-轮转数组
笔记·算法·leetcode
琥珀色糖1 天前
leetcode hot100题(持续更新)移动零(双指针)
算法·leetcode·职场和发展·双指针·移动零
LuminousCPP1 天前
单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
数据结构·经验分享·笔记·学习·算法·链表
hanlin031 天前
动态规划专练:力扣第718、1143题
算法·leetcode·动态规划
hanlin031 天前
动态规划专练:力扣第1035、392题
算法·leetcode·动态规划
evans在进步1 天前
LeetCode 34:在排序数组中查找元素的首尾位置——Java 两次二分查找详解
java·python·leetcode