时间复杂度(O(n))
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(head==NULL||m==n) return head;
ListNode *node = head;
int count =0 ;
if(m>n){
int tmp = n;
n = m;
m = tmp;
}
ListNode *pm = head;
ListNode *pn = head;
if(m==1){
pm = head;
ListNode *qm = head;
for(int i=m;i<n&&pm->next!=NULL;++i){
qm = pm->next;
pm->next = pm->next->next;
qm->next = head;
head = qm;
}
}
while(node!=NULL){
++count;
if(m==count+1){
pm = node;
ListNode *qm = pm;
pm = pm->next;
for(int i=m;i<n&&pm->next!=NULL;++i){
ListNode *tmp_m = pm->next;
pm->next = pm->next->next;
tmp_m->next = qm->next;
qm->next = tmp_m;
}break;
}
node = node->next;
}
return head;
}
};