题解 | 链表内指定区间反转

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    // write code here
    if (head == NULL || m == n) return head;
    
    // 创建虚拟头节点,简化边界处理
    struct ListNode dummy;
    dummy.next = head;
    
    // 找到反转区间的前一个节点
    struct ListNode *pre = &dummy;
    for (int i = 1; i < m; i++) {
        pre = pre->next;
    }
    
    // 反转区间
    struct ListNode *cur = pre->next;
    struct ListNode *prev = NULL;
    struct ListNode *next = NULL;
    
    for (int i = m; i <= n; i++) {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    
    // 连接三部分
    // pre->next 现在是反转后的尾节点
    // prev 是反转后的头节点
    // cur 是反转区间后的第一个节点
    pre->next->next = cur;
    pre->next = prev;
    
    return dummy.next;


}

全部评论

相关推荐

03-18 01:22
门头沟学院 Java
肖先生~:先别说工资,现在有个工作就不错了
点赞 评论 收藏
分享
最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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