* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
// 指针指向的变化
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode dummy(0,head); //新建一个头节点,空的
ListNode* p0 = &dummy;
for(int i = 0; i < left -1 ; i++){
p0 = p0->next; //找到左边第一个的前一个节点指针
}
//p0表示左边第一个的前一个节点指针
ListNode* pre = nullptr; //pre表示当前节点的前一个位置
ListNode* cur = p0->next; //cur表示当前的位置
for(int i = 0 ; i < right - left + 1; i++){
ListNode* nxt = cur->next;
cur->next = pre; //l-r之间的节点指针方向改变,即当前节点的next指针指向上一个
pre = cur; //pre变成当前节点的位置
cur = nxt; //当前的节点变成下一个节点位置
}
p0->next->next = cur; //细品 ,左边第一个节点指向r的下一个节点的位置
p0->next = pre; //p0的前一个节点与r节点连接
return dummy.next;
}
};```