以1->2->3->4->5(m=2,n=4)为例
时间复杂度:O(N)
C++代码:
class Solution {
public:
ListNode * reverseBetween(ListNode* head, int m, int n) {
if (head == nullptr || head->next == nullptr || m == n)
return head;
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* frontMark = dummy, *rearMark, *p1, *p2, *p3;
for (int i = 0; i < m - 1; i++)
frontMark = frontMark->next;
p1 = frontMark->next;
rearMark = p1;
p2 = p1->next;
p3 = p2->next;
int count = 0;
while (count < n - m)
{
p2->next = p1;
p1 = p2;
p2 = p3;
if (p3 == nullptr)
break;
p3 = p3->next;
count++;
}
frontMark->next = p1;
rearMark->next = p2;
return dummy->next;
}
};