自学内容网 自学内容网

力扣 中等 92.反转链表 II

文章目录

题目介绍

在这里插入图片描述

题解

在这里插入图片描述

class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        // 创建一个哑节点,它的 next 指向头节点,方便处理
        ListNode dummy = new ListNode(0, head);
        // p0 用于指向反转部分的前一个节点
        ListNode p0 = dummy;
        // 移动 p0 到反转部分的前一个节点
        for (int i = 0; i < left - 1; i++) {
            p0 = p0.next;
        }
        ListNode cur = p0.next, pre = null;
        // 执行反转
        for (int i = 0; i < right - left + 1; i++) {
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        // 反转完之后,cur 指向需要反转部分的下一个节点
        // pre指向需要反转部分的最后一个节点
        // 此时 p0.next 还和原来一样,指向未反转时需要反转的第一个节点
        p0.next.next = cur;
        p0.next = pre;
        // 返回哑节点的下一个节点,即头节点
        return dummy.next;
    }
}

原文地址:https://blog.csdn.net/qq_51352130/article/details/142500494

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!