给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode*dummy=new ListNode(0,head);
ListNode*cur=dummy;
ListNode*startPre=nullptr;
ListNode*start=nullptr;
ListNode*end=nullptr;
ListNode*endPost=nullptr;
for(int i=1;i<left;i++){
cur=cur->next;
}
startPre=cur;
start=cur->next;
int n=right-left+1;
for(int i=0;i<n;i++){
cur=cur->next;
}
end=cur;
endPost=cur->next;
ListNode*pre=start;
cur=start->next;
while(cur!=endPost){
ListNode*tmp=cur->next;
cur->next=pre;
pre=cur;
cur=tmp;
}
startPre->next=end;
start->next=endPost;
return dummy->next;
}
};
解法参考超详细:从认识链表到学会反转链表 (qq.com)变形题2