利用四个指针:
两个指针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; } };