题解 | #链表内指定区间反转#翻转指定区间的链表:简洁版
链表内指定区间反转
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;
}
};

