与平常反转链表思路类似,将需要反转的段反转后连接好头尾即可
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(!head||!head->next||m==n)return head;
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* pre, *cur = dummy, *last,*prev;
for(int i = 1;i<=m-1;i++)cur=cur->next;
pre = cur;
cur = cur->next;
last = cur;
for(int i = m;i<n;i++)
{
pre->next = cur->next;
cur->next = prev;
prev = cur;
cur = pre->next;
}
last->next = cur->next;
cur->next = prev;
return dummy->next;
}