题解 | #链表内指定区间反转#翻转指定区间的链表:简洁版
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
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* prev = nullptr; ListNode* curr = head; //1.遍历到翻转起点 int cnt = 1; while(cnt < m && curr) { cnt++; prev = curr; curr = curr -> next; } if(!curr) return head; //2.记录断点 ListNode* breTail = prev; ListNode* breHead = curr; prev = nullptr; //3.转m~n节点 ListNode* tmp = nullptr; while(curr) { cnt++; tmp = curr -> next; curr -> next = prev; prev = curr; if(cnt == n + 1) break; curr = tmp; } //4.重新连接 if(breTail) breTail -> next = curr; //m = 1时breTail为nullptr breHead -> next = tmp; return m == 1 ? curr : head; } };