定义一个自增索引来确认是否到达要反转的部分,保存要反转的部分的前一个节点left和第一个节点right,在遍历的过程中,到达要反转的部分后,就开始进行反转,到达要反转部分的最后一个节点后,使left指向要反转部分的最后一个节点,right指向下一个节点,返回头节点。如果m的值为1,则left值为nullptr,此时返回要反转部分的最后一个节点。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* prev = nullptr;
ListNode* current = head;
ListNode* node_left;
ListNode* node_right;
ListNode* temp;
int index = 0;
while (index < n) {
index++;
if (index < m) {
prev = current;
current = current->next;
} else if (index == m) {
node_left = prev;
node_right = current;
prev = current;
current = current->next;
} else if (index > m) {
temp = current->next;
current->next = prev;
prev = current;
current = temp;
if (index == n) {
if (m == 1) {
node_right->next = current;
return prev;
} else {
node_left->next = prev;
node_right->next = current;
}
}
}
}
return head;
}
};



京公网安备 11010502036488号