ListNode* reverseBetween(ListNode* head, int m, int n) {
if(head == NULL)
return head;
if(m == n)
return head;
ListNode* headn = head;
ListNode* headmpre = NULL;
ListNode* headm = head;
int nc = 1;
while(headn && nc != n)
{
nc++;
headn = headn->next;
}
if(headn->next)
headn = headn->next;
else
headn = NULL;
int mc = 1;
while(headm && mc != m)
{
mc++;
headmpre = headm;
headm = headm->next;
}
ListNode* newheadm = headn;
ListNode* headne = NULL;
while(headm != headn)
{
headne = headm->next;
headm->next = newheadm;
newheadm = headm;
headm = headne;
}
if(headmpre != NULL)
headmpre->next = newheadm;
else
head = newheadm;
return head;
}