/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * 注意m==n, 和m,n为起始和结束两个节点时的返回的表头的特殊情况 * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ ListNode* reverseBetween(ListNode* head, int m, int n) { // write code here ListNode *cur, *prev, *next, *m_node, *n_node, *m_prev_node, *n_next_node; int cnt = 1; cur = head; prev = NULL; if (m==n) return head; for (cnt = 1; cnt < n && cur != NULL; cnt++) { if (cnt < m) { prev = cur; cur = cur->next; continue; } if (cnt == m) { m_prev_node = prev; m_node = cur; prev = cur; cur = cur->next; continue; } next = cur->next; cur->next = prev; prev = cur; cur = next; } if (cnt == n && cur != NULL) { n_node = cur; n_next_node = cur->next; n_node->next = prev; if (m_prev_node != NULL) { m_prev_node->next = n_node; } m_node->next = n_next_node; } if (m_prev_node != NULL) { return head; } else { return n_node; } } };