// 定义一个解决方案类 classSolution{ // 定义函数 reverseBetween,接收头节点 head 和两个整型参数 left 和 right public ListNode reverseBetween(ListNode head, int left, int right){ // 创建一个哑节点 dummyNode,哑节点通常用于简化链表操作,这里值设为-1不影响链表 ListNode dummyNode = new ListNode(-1); // 将哑节点的下一个节点指向头节点,这样便于操作头部节点 dummyNode.next = head; // 定义一个指针 pre,初始化指向 dummyNode,用于定位 left 的前一个位置 ListNode pre = dummyNode; // 通过循环,将 pre 移动到 left 的前一个位置 for (int i = 0; i < left - 1; i++) { pre = pre.next; } // 定义 cur 指针,指向要开始反转的第一个节点 ListNode cur = pre.next; // 定义 next 指针,用于临时存储 cur 的下一个节点,便于调整链接 ListNode next; // 进行 right-left 次操作以实现局部链表的反转 for (int i = 0; i < right - left; i++) { next = cur.next; // next 指向 cur 的下一个节点 cur.next = next.next; // cur 的下一个指向 next 的下一个节点,断开 cur 与 next 的直接联系 next.next = pre.next; // next 的下一个节点指向 pre 的下一个节点,实现节点插入 pre.next = next; // pre 的下一个节点指向 next,完成一次节点提前的过程 } // 最后返回新的头节点,由于可能改变了头节点,所以需要从 dummyNode 的下一个节点返回 return dummyNode.next; } }