给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:

输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1 输出:[5]
题目分析
. - 力扣(LeetCode)
代码:
/**
 * 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 *pre = new ListNode(0,head); //伪头节点
        ListNode * reversePre = pre;              
        int count = 1;
        //找到反转区间头节点的上一个节点
        while(count < left){
            reversePre = reversePre -> next;
            count++;
        }
        ListNode * reverseHead = reversePre -> next;      //获取反转区间头节点
        //反转区间
        ListNode * last = nullptr;
        ListNode * cur = reverseHead;
        ListNode * next;
        while(count<=right){
            next = cur -> next;
            cur -> next = last;
            last = cur;
            cur = next;
            count++;
        }
        //重新拼接
        reversePre->next = last;
        reverseHead->next = cur;
        return pre->next;
    }
};


















