题解 | #链表内指定区间反转#
链表内指定区间反转
http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/**
- struct ListNode {
- int val;
- struct ListNode *next;
- }; */
class Solution { public: /** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 / ListNode reverseBetween(ListNode* head, int m, int n) { // write code here if(n==m) return head;
ListNode *pStart=head;//起始之前的节点
ListNode *pEnd;
if(m==1){
ListNode *p=head;
ListNode *pNext=p->next;
for(int i=1;i<n;i++){
ListNode *pLast=p;
p=pNext;
pNext=pNext->next;
p->next=pLast;
}
pStart->next=pNext;
return p;
}
else{
for(int i=1;i<m;i++){
if(i==1)
pStart=pStart;
else
pStart=pStart->next;
}
ListNode *p=pStart->next;
ListNode *pNext=p->next;
for(int i=1;i<=n-m;i++){
ListNode *pLast=p;
p=pNext;
pNext=pNext->next;
p->next=pLast;
}
pStart->next->next=pNext;
pStart->next=p;
return head;
}
}
};
特判起始位置为1,剩余的稍微修改一下整体反转的代码即可