题解 | #链表内指定区间反转#翻转指定区间的链表:简洁版

链表内指定区间反转

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; 
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务