/**
* 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( m<1 || n<1 || m>n )
{
throw "errorInput";
}
if( nullptr==head || nullptr==head->next )
{
return head;
}
ListNode * dummy=new ListNode( 0x3f3f3f );
dummy->next=head;
//表示已经到了第1个节点
ListNode * pre=dummy;
ListNode * cur=head;
int beginLoop=m-1;
int endLoop=n;
while( beginLoop-- )
{
cur=cur->next;
pre=pre->next;
--endLoop;
}
ListNode * sentry=nullptr;
while( endLoop-- )
{
ListNode * temp=cur->next;
cur->next=sentry;
sentry=cur;
cur=temp;
}
pre->next->next=cur;
pre->next=sentry;
ListNode * del=dummy;
dummy=dummy->next;
delete del;
return dummy;
}
};