保存反转区间的首尾结点指针,用于反转;同时保存反转区间的前一个结点指针和后一个结点指针,用于反转之后的链接。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
void reverse_list(ListNode* left,ListNode* right){
ListNode* pre = nullptr;
ListNode* cur = left;
while(pre!=right){
ListNode* temp = cur->next;
cur->next=pre;
pre=cur;
cur=temp;
}
}
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* dummy_head=new ListNode{1001};
dummy_head->next=head;
ListNode* left=dummy_head;
ListNode* right=dummy_head;
ListNode* front_node=dummy_head;
ListNode* back_node=dummy_head;
while(--m) front_node=front_node->next;
left=front_node->next; //反转区间的前一个结点
while(n--) right=right->next;
back_node=right->next; //反转区间之后的一个结点
reverse_list(left, right);
front_node->next=right;
left->next=back_node;
return dummy_head->next;
}
};