/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
if(left == right) return head;
auto ans = new ListNode(-1, head), ptr = ans;
for(int i = 0; i < left - 1; ++i)
ptr = ptr->next;
auto p1 = ptr->next;
for(int i = 0; i < right - left; ++i)
{
auto temp = p1->next;
p1->next= temp->next;
temp->next = ptr->next;
ptr->next = temp;
}
return ans->next;
}
};