class Solution {
public:
ListNode* successor = NULL;
ListNode* reverseBetween(ListNode* head, int left, int right){
if(left == 1) return reverse(head,right);
head->next = reverseBetween(head->next,left - 1,right - 1);
return head;
}
ListNode* reverse(ListNode* head,int right){
if(right == 1){
successor = head->next;
return head;
}
ListNode* last = reverse(head->next,right - 1);
head->next->next = head;
head->next = successor;
return last;
}
};