# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param m int整型 
# @param n int整型 
# @return ListNode类
#
class Solution:
    def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
        # write code here
        # 加个表头
        res=ListNode(-1) # 头节点之前的位置
        res.next=head
        # 前序节点
        pre=res
        # 当前节点
        cur=head
        # 找到m位置
        for i in range(1,m):
            pre,cur=cur,cur.next  # pre cur 往后移
        # 此时 pre是位置m-1 cur是位置m
        # 反转之后,m在最后一个(cur往后移),n接在pre之后
        for i in range(m,n):  # cur锚定在2上,不再改变
        
            a=cur.next        # 2的下一个是3
            cur.next=a.next   # 2与(3的下一个)4连接 2-->4
            a.next=pre.next   # 3与2连接 3-->2

            pre.next=a        # 1 与 3 连接 1-->3
            # 1-->3-->2-->4-->5
            # 1-->4-->3-->2-->5
            
        return res.next

# b,a,a.next=b.next,b,a