/** * 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; } };
别再出错了