240
It works on my machine

Leetcode92: Reverse Linked List II 翻转链表问题

问题描述

给定一个链表,要求翻转其中从m到n位上的节点,返回新的头结点。

Example

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL

分析

这题解法比较直接,可以定义一个fakeNode, 首先拼接 1 到 m - 1的节点, 然后拼接链表 m 到 n reverse 之后的结果,最后拼接剩下的节点。reverse链表这里主要使用stack和3指针方法。

解法

方法1. Stack

 ListNode fakeHead = new ListNode(0);
        ListNode cur =fakeHead;
        ListNode curH = head;
        int cnt = n - m + 1;
        //链接 1到m - 1节点
        while(m > 1){
            cur.next = curH;    
            curH = curH.next;
            cur = cur.next;
            m--;
        }
        cur.next = null;
        //链接m 到 n 翻转之后的结果
        Stack<ListNode> stack =new Stack();
        for(int i = 0; i < cnt; i++){
            stack.push(curH);
            curH = curH.next;
        }
        while(!stack.isEmpty()){
            cur.next = stack.pop();
            cur = cur.next;
        }
        //链接 n + 1 之后的链表
        cur.next = curH;
        
        return fakeHead.next;

时间复杂度O(n),空间复杂度O(n)

方法2. 3指针

 public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode fakeHead = new ListNode(0);
        ListNode cur =fakeHead;
        ListNode curH = head;
        int cnt = n - m + 1;
        //链接 1到m - 1节点
        while(m > 1){
            cur.next = curH;    
            curH = curH.next;
            cur = cur.next;
            m--;
        }
        cur.next = null;
        //链接m 到 n 翻转之后的结果
        ListNode pre = null;
        ListNode next = curH.next;
        ListNode tail =curH;
        for(int i = 0; i < cnt; i++){
            curH.next = pre;
            pre = curH;
            curH = next;
            if(next != null){
                next = next.next;            
            }
        }
        cur.next = pre;
        //链接 n + 1 之后的链表
        tail.next = curH;

        return fakeHead.next;
    }

时间复杂度O(n),空间复杂度O(1)

posted @   禾码大叔  阅读(227)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示