# 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 if m==n or head ==None or head.next ==None: return head res = ListNode(-1) #加表头,最终返回res.next res.next = head prev = res #m前一个元素, 每次遍历只改变next指针,指向上次遍历p的下一跳 p = head #遍历指针,每次向前移动一位,到n后停止 for _ in range(m-1): #找到m位置 prev = p p = p.next for _ in range(m,n): temp = p.next #保存当前p的下一跳 p.next = temp.next #p的下一跳变为原来下一跳的下一跳 temp.next = prev.next #原来p的下一跳(temp)指向p自己,实现反转 prev.next = temp # prev的指针刷新为原先p的下一跳 return res.next ''' 假设列表1~5,m=2,n=4,找到m后 prev: 1 ==>prev.next: 2 ==> prev.next.next: 3 ==> prev.next.next.next: 4 p: 2 p.next: 3 while遍历过程中 prev: 1 ==>prev.next: 3 ==> prev.next.next: 2 ==> prev.next.next,next: 4 p: 2 p.next: 4 while遍历过程中 prev: 1 ==>prev.next: 4 ==> prev.next.next: 3 ==> prev.next.next,next: 2 p: 2 p.next: 5 '''