【链表】LeetCode 92. 反转链表 II

题目链接

92. 反转链表 II

思路

【链表】LeetCode 206. 反转链表的思路一样,只不过需要调整一下realHead头结点的位置,同时原题中的null在本题中为rightNode的下一个结点。

注意: 如果left == 1则说明head结点也需要被反转,此时反转后的首结点为rightNode需要在返回的时候单独判断。

代码

class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {

        if(left == right){
            return head;
        }

        ListNode realHead = new ListNode(-1, head);
        for(int i = 1; i < left; i++){
            realHead = realHead.next;
        }

        ListNode rightNode = new ListNode(-1, head);
        for(int i = 0; i < right; i++){
            rightNode = rightNode.next;
        }
        ListNode endNode = rightNode.next;

        ListNode p = realHead.next;
        realHead.next = endNode;
        while(p != endNode){
            ListNode q = p.next;
            p.next = realHead.next;
            realHead.next = p;
            p = q;
        }

        return left == 1 ? rightNode : head;
    }
}
posted @   Frodo1124  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示