# 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 , m , n ):
# write code here
if not head or n<m :
return head
new_head = ListNode(-1)
new_head.next = head
pre_node = new_head
for i in range(1,m):
pre_node = pre_node.next
a = pre_node.next
b = pre_node.next
for j in range(m,n):
b = b.next
next_node = b.next
a,b = self.reverse(a,b)
pre_node.next = a
b.next = next_node
return new_head.next
def reverse(self,a,b):
new_head = ListNode(-1)
new_head.next = a
b.next = None
temp = a
while temp:
new_temp = temp.next
temp.next = new_head.next
new_head.next = temp
temp = new_temp
return b,a