- 找到区间的pre、left、right、nxt,保存
- 区间反转
- pre.next 连接新头(right)
- 区间尾巴(原来的left)接上nxt
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defreverseBetween(self,head:Optional[ListNode],left:int,right:int)->Optional[ListNode]:# 1. 找区间的pre、next 节点pre=ListNode(0)pre.next=head dummy=preforiinrange(left-1):pre=pre.next# 此时pre.next = 区间头节点left_node=pre.nextright_node=headforiinrange(right-1):right_node=right_node.next# 2. 反转区间cur=left_node# 断首尾prev=ListNode(0)prev.next=left_node# 给个暂时的节点,指向区间leftnxt=right_node.next# 保存原始区间nextwhilecur!=nxt:# 结束时cur已经出区间了,这样区间内才反转完tmp=cur.next# 保存原始区间nextcur.next=prev prev=cur cur=tmp pre.next=right_node# 原来的区间pre_node 指向原来的尾节点(现在的left)left_node.next=nxt# 现在的尾节点(原来的left)指向保存好的nxtreturndummy.next