# 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:
#设置哨兵节点,对于链表相关的问题,我们通过设置哨兵节点可以省去边界条件的判断
dummynode = ListNode(-1)
#哨兵节点指向链表头
dummynode.next = head
pre = dummynode
#遍历,使得pre指向链表反转部分的第一个结点 m 代表的位置前一个节点
for _ in range(m - 1):
pre = pre.next
#cur指向链表反转部分的第一个节点 m 代表的位置
cur = pre.next
for _ in range(n - m):
temp = cur.next # 将 m 下一个节点的地址存到 temp 变量里面
cur.next = temp.next # 将 m 存储的下一个节点地址改为 m+2 节点的地址
temp.next = pre.next # 将 m + 1 节点 存储的节点地址改为 pre 的下一个节点(每一次循环都是cur 的下一个地址,cur不断移动直到n的位置)
pre.next = temp # 将pre 存储的节点地址 改为temp变量的值 即为 m + 1 的地址
return dummynode.next