版权声明:转载请联系博主 https://blog.csdn.net/zxtalentwolf/article/details/83932750
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
const static int x=[]{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
return NULL;
}();
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(m==n) return head;
ListNode* cur_next;//当前遍历节点的下一个节点
ListNode* cur; //当前遍历节点
ListNode* cur_prev; //当前遍历节点的上一个节点
ListNode* tail; //反转节点的最后一个节点
ListNode* prev;
if(m==1){
tail=head;
cur=head;
cur_prev=NULL;
cur_next=cur->next;
int i=m;
for(int i=m;i<n+1;i++){
cur->next=cur_prev;
cur_prev=cur;
cur=cur_next;
if(cur!=NULL)
cur_next=cur->next;
}
head=cur_prev;
tail->next=cur;
}else{
cur=head;
int i=1;
while(i<m-1){
cur=cur->next;
i++;
}
prev=cur;
cur=cur->next;
tail=cur;
cur_prev=NULL;
cur_next=cur->next;
for(int i=m;i<n+1;i++){
cur->next=cur_prev;
cur_prev=cur;
cur=cur_next;
if(cur!=NULL)
cur_next=cur->next;
}
tail->next=cur;
prev->next=cur_prev;
}
return head;
}
};