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

// 百度 meg 一面时遇到要寿司
class Solution {
  public:

    ListNode* fanzhuan(ListNode* head, ListNode* tail) {
        // 给定头尾两结点 翻转

        ListNode* curr = head;
        ListNode* endh = tail->next; // 作为循环是否终止的标志
        ListNode* pre = endh;

        while (curr != endh) {
            ListNode* tmp = curr->next;
            curr->next = pre;

            pre = curr;
            curr = tmp;
        }

        return pre; // 返回这一段链表的新的头结点!

    }

    /**
     *
     * @param head ListNode类
     * @param m int整型
     * @param n int整型
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        ListNode* aaa = new ListNode(-1);

        aaa->next = head;

        ListNode* left = aaa;

        for (int i = 0; i < m - 1; ++i) {
            left = left->next;
        }

        ListNode* preleft = left;
        left = left->next;

        ListNode* right = left;

        for (int i = m; i < n; ++i) {
            if (right->next != nullptr) {
                right = right->next;
            }
        }

        ListNode* newM =  fanzhuan(left, right);
        // ListNode* curr = left;
        // ListNode* pre = right->next;
        // ListNode* endh = right->next;

        // while (curr != endh) {
        //     ListNode* tmp = curr->next;
        //     curr->next = pre;

        //     pre = curr;
        //     curr = tmp;
        // }

        preleft->next = newM; //pre

        return aaa->next;

    }
};

别再出错了