反轉鏈表的擴展,要求能理解本質,考慮邊界情況
class Solution
{
public:
ListNode* reverseBetween(ListNode* head, int m, int n)
{
ListNode* result = NULL;
ListNode* p = head;
ListNode* left = NULL;
int i = 1;
for( ; i < m ; i++)
{
left = p;
p = p->next;
}
ListNode* subRight = p;
ListNode* r = NULL;
for(; i <= n; i++)
{
ListNode* q = p->next;
p->next = r;
r = p;
p = q;
}
if(left != NULL)
{
left->next = r;
result = head;
}
else
{
result = r;
subRight = head;
}
subRight->next = p;
return result;
}
};