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        
相关推荐
想吃火锅10057 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
小林ixn8 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
菜鸟‍10 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时11 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
sjsjs1115 小时前
力扣3558. 给边赋权值的方案数 I
算法·leetcode·职场和发展
花间相见15 小时前
【LeetCode01】—— 无重复字符的最长子串:滑动窗口经典题详解
python·算法·leetcode
言存17 小时前
力扣热题283 移动零
数据结构·算法·leetcode
洛水水19 小时前
【力扣100题】80.寻找旋转排序数组中的最小值
数据结构·算法·leetcode
洛水水19 小时前
【力扣100题】82.有效的括号
c++·算法·leetcode
legend050709ComeON19 小时前
常见面试题-leetcode
数据结构·算法·leetcode