利用四个指针:
两个指针cur、prev用来遍历需要反住哪的部分链表。
一个指针begin指向反转部分的前一个节点。
一个指针指向反转部分的第一个节点。

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {

        // write code here
        ListNode*cur = head;
        ListNode* Next = nullptr;
        ListNode* end = nullptr;
        ListNode* begin = nullptr;
        ListNode* prev = nullptr;
        int i = 0;


        for(i = 1; i< m;i++)
        {
            begin = cur;
            cur = cur->next;
        }

        prev = cur;
        end = cur;

        for(i = m;i<=n;i++)
        {
            Next = cur->next;
            cur->next =prev;
            prev = cur;
            cur = Next;

        }

        if(m ==1)
        {
            head = prev;
        }
        else
        {
            begin->next = prev;   
        }

        end->next = cur;


        return head;
    }
};