写的很混乱,见笑了,要考虑M=1的特殊情况
struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {
struct ListNode *p,*q,*r,*pre,*s;
int i=1;
p=head;
if (m == 1)
{
q = NULL;
for (i = 0; i < n - 1; i++)
p = p->next;
pre = p;
p = p->next;
pre->next = NULL;
s = p;
p = head;
while (p)
{
r = p->next;
p->next = q;
q = p;
p = r;
}
p=q;
while(p->next)
p=p->next;
p->next=s;
return q;
}
for(i=1;i<m-1;i++)
p=p->next;
pre=p;
p=p->next;
pre->next=NULL;
q=NULL;
for(i=0;i<n-m+1;i++)
{
r=p->next;
p->next=q;
q=p;
p=r;
}
pre->next=q;
while(q->next)
q=q->next;
q->next=p;
return head;
}