题目描述:翻转链表第m个到第n个
数学归纳法:
要反转部分的前一个当头,第一个当尾
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode dummy{ -1 };
dummy.next = head;
ListNode *prev = &dummy;
for (int i = 0; i < m - 1; ++i)
prev = prev->next;
ListNode *head2 = prev;
prev = head2->next;
ListNode *cur = prev->next;
for (int i = 0; i < n - m; ++i) {
prev->next = cur->next;
cur->next = head2->next;
head2->next = cur;
cur = prev->next;
}
return dummy.next;
}
};