/** * 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 *ans = new ListNode(-1); ans->next = head; ListNode *leftNode = ans; // 定位到第m-1位; for(int i=0;i<m-1;++i) { leftNode = leftNode->next; } ListNode *rightNode = leftNode; // 定位到n+1, for(int i=m;i<n+1;++i) { rightNode = rightNode->next; } // 截取出一个子链表 ListNode *temp = leftNode->next; ListNode *rightNode_next = rightNode->next; // 切断链接 leftNode->next = NULL; rightNode->next = NULL; // 反转局部链表 ListNode *temp_pre = NULL; ListNode *temp_cur = temp; while(temp_cur) { ListNode *temp_cur_next = temp_cur->next; temp_cur->next = temp_pre; temp_pre = temp_cur; temp_cur = temp_cur_next; } // 接回原来的链表 leftNode->next = rightNode; temp->next = rightNode_next; return ans->next; } };