leetcode92. Reverse Linked List II

010Editor实战:5分钟破解Zip伪加密文件(附BUUCTF真题解析) 本文详细介绍了如何使用010Editor快速破解Zip伪加密文件,包括BUUCTF真题的完整解析。通过修改关键字节,轻松解除伪加密状态,适用于CTF竞赛和实际工作场景,提升文件处理效率。 阅读详情

某位大牛写的算法,简直五体投体,里面灵活地运用了简单逆序链表的思想,为啥我就想不到呢,真的比较笨,要多体会

【解析】

consider m,n as the cutting point ,and cut the linklist to three parts. The first  and third part is just  marked as the same of  original link list,and the second part should be reversed and we should notice to save the node in m to let it connect with the third part.

public ListNode reverseBetween(ListNode head, int m, int n) {
	ListNode dummyhead = new ListNode(0);
	dummyhead.next = head;
	ListNode sublisthead = new ListNode(0);
	ListNode sublisttail = new ListNode(0);
	int count = 1;
	ListNode pre_cur = dummyhead, cur = head;
	while(count <=n){
		ListNode temp = cur.next;
		if (count < m)
			pre_cur = cur;
		else if (count == m){
			sublisttail = cur;
			sublisthead.next = cur;
		}else if (count > m){
			cur.next = sublisthead.next;
			sublisthead.next = cur;
		}
		cur = temp;
		++count;
	}
	pre_cur.next = sublisthead.next;
	sublisttail.next = cur;
	return dummyhead.next;
}

做这个算法深刻理解了对象引用的问题,

对于listNode里面的next操作,改变的是内部的值,会有链式反应。(内部值发生改变)

对于listNode对应的整个变量操作,则不会产生链式反应。(引用发生改变)

例如:cur.next会改变head;但是cur不会改变head


对以上算法进行了修改,便于理解

public class Solution {
   public ListNode reverseBetween(ListNode head, int m, int n) {
	ListNode dummyhead = new ListNode(0);
	dummyhead.next = head;
	ListNode sublisthead = new ListNode(0);
	ListNode sublisttail = new ListNode(0);
	int count = 1;
	ListNode pre_cur = dummyhead, cur = head;
	while(count <=n){
		ListNode temp = cur.next;
		if (count < m)
			pre_cur = cur;
		else if (count == m){
			sublisttail = cur;
			sublisthead.next = sublisttail;//连接sublisttail
		}else if (count > m){
			cur.next = sublisthead.next;
			sublisthead.next = cur;
		}
		cur = temp;
		++count;
	}
	pre_cur.next = sublisthead.next;
	sublisttail.next = cur;
	return dummyhead.next;
}


 public ListNode reverseBetween(ListNode head, int m, int n) {
           ListNode dummyhead = new ListNode(0);
        dummyhead.next = head;
        ListNode sublisthead =new ListNode(0);
        ListNode sublisttail =new ListNode(0);
        int count = 1;
        ListNode pre_cur = dummyhead, cur = head;
        while(count <=n){
            ListNode temp = cur.next;
            if (count < m)
                pre_cur = cur;
            else if (count == m){
                sublisttail = cur;
//                sublisthead = cur;
            }else if (count > m){
                cur.next = sublisthead.next;
                sublisthead.next = cur;
            }
            cur = temp;
            ++count;
        }
       ListNode p=sublisthead;
        while(p.next!=null){
            p=p.next;
        }
        p.next=sublisttail;//连接sublisttail
        sublisttail.next = cur;
        pre_cur.next = sublisthead.next;
        return dummyhead.next;
    }


总结:

上述是in-place algorithm 需要四个标志:1、本身链表  2、链表的游标 3、临时链表:保存游标之后的结点  4、翻转链表:返回用,保存游标之前的结点

还有一种是重新生成一个链表的相关算法,也需要三个标志:1、本身链表:返回用 2、链表的游标  3、新建结点:创建新的结点用.

如:两数相加算法

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       ListNode result=new ListNode(0);  //1
       ListNode p1=l1,p2=l2;
       ListNode r=result;                //2
       int mode=0;
       while(p1!=null||p2!=null||mode!=0){
           ListNode temp=new ListNode(0);//3
           int val=((p1==null)?0:p1.val)+((p2==null)?0:p2.val)+mode;
           temp.val=val%10;
           mode=val/10;
           r.next=temp;
           r=r.next;
           p1=(p1==null)?p1:p1.next;
           p2=(p2==null)?p2:p2.next;
       }
    //   if(mode!=0){
    //       r.next=new ListNode(mode);
    //   }
       return result.next;
    }




智能车图像处理21-进阶篇13--正入十字补线2 这篇文章主要的正入十字补线与1基本相同,主要防止图像中双十字的问题。 阅读详情

相关推荐

电蚊拍为什么能秒杀蚊子?深入解析两种四倍压整流电路设计差异

本文深入解析电蚊拍秒杀蚊子的核心原理——四倍压整流电路设计,对比对称式与级联式两种方案的性能差异。通过详细电路分析、实测数据对比和选型建议,揭示高压电路设计的关键技术要点,为电子爱好者和工程师提供实用参考。

rust6ferris的博客 752

leetcode 92. Reverse Linked List II

思路很简答,但一次性通过还是有点难度的。是第206题的进阶版。

weixin_41554427的博客 743

stc8g1k08硬件iic读取aht20温湿度及0.91寸oled显示

使用stc8g1k08读取aht20温湿度及0.91寸oled显示。

qq_61688416的博客 2772

LeetCode 92. Reverse Linked List II(链表)

题目来源:https://leetcode.com/problems/reverse-linked-list-ii/ 问题描述 92.Reverse Linked List II Medium Reverse a linked list from positionmton. Do it in one-pass. Note:1 ≤m≤n≤ length of list. ...

da_kao_la的博客 198

vtk相机_分别用 VTK 体绘制和面绘制来实现医学图像三维重建;

序言,VTK介绍:VTK 全称为 The Visualization Toolkit (可视化工具),是一个开源、跨平台、自由获取、支持并行计算的图形应用函数;拥有3D 渲染的最新工具、提供3D交互模式以及2D绘图等。VTK 包含一个C++类库,目前提供了众多语言接口,例如 Java、Python、TCL;在三维函数库OpenGL 的基础上采用面向对象设计方法发展起来图形学基本概念和数据...

weixin_39665302的博客 689

Django 前后端分离实战:网络设备运维系统 - 从登录认证到业务模块

这篇文章分享了Django+Vue前后端分离开发网络设备运维系统的实战经验,重点介绍了登录认证、全局布局和设备管理三大模块的实现。文章包含以下核心内容: 登录模块实现:包括表单验证、Token认证、记住密码功能,以及美观的UI设计(渐变背景、毛玻璃效果) 全局布局架构:采用侧边栏+顶部导航的响应式设计,支持菜单权限控制和多设备适配 业务功能开发:详细展示了设备分类和部门管理的CRUD功能实现,包括列表展示、搜索过滤、分页等功能 常见问题解决:提供了5个开发中常见问题的解决方案,如Vue Router警告、C

qq_16766705的博客 526

Leetcode 92 Reverse Linked List II

题意描述 Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Example: Input: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL, m = 2, n = 4 Output: 1-&gt;4-&gt;3-&gt;2-&gt;5...

herosunly的博客 1万+

OpenClaw 子代理配对失败问题分析与解决方案

OpenClaw子代理配对失败问题分析与解决方案 问题核心在于agent设备权限不足,仅有operator.approvals权限而缺少operator.admin权限,导致子代理启动时形成权限死锁。本文提供三种解决方案: 直接编辑设备配对文件(推荐):修改本地JSON文件,为agent设备添加完整operator.admin权限,操作简单快捷。 标准重新配对流程:删除现有agent设备后重新配对,通过正常审批流程获取完整权限,符合系统安全设计。 修改源码降低权限要求(仅限开发环境):调整子代理代码避免强制

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 151

LeetCode力扣之92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass.For example:Given 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL, m = 2 and n = 4,return 1-&gt;4-&gt;3-&gt;2-&gt;5-&gt;NULL.Note:Given m,...

LeeWei 218

Qt Creator配置MSVC编译环境、调试环境

获取和安装:cdb.exe 在 Debugging tools for Windows 中,而现在已经不单独提供下载,只在Windows SDK 或者Windows Driver Kit里面包含 所以需要下载微软的调试工具,最少需要下载 Windows SDK。在windows上开发,一般使用Qt Creator自带mingw编译器,编译和调试都很方便,安装Qt时勾选后,自动配置完毕。但是有时候我们需要使用MSVC的编译器,这个时候我们没法直接使用,需要配置环境才能使用,以下是配置方案。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 6988

RTA_OS基础功能讲解 2.6-资源锁和自旋锁

访问需要在任务和 ISR 之间共享的硬件或数据可能不可靠、不安全。这是因为当优先级较低的任务或 ISR 正在更新共享数据时,可能会发生任务或 ISR 抢占。这种情况被称为竞争条件,极难测试。访问共享数据的语句序列称为关键部分。要安全访问关键部分中引用的代码和数据,就需要执行互斥。换句话说,必须确保系统中没有其他任务或第 2 类 ISR 能够在关键部分期间抢占正在执行的任务。你可以将任务声明为非抢占式任务,这样就可以避免互斥问题。

本博客专注于嵌入式软件领域技术分享。 291

LeetCode 92. Reverse Linked List II 题解

本题是链表的经典问题,主要考察对链表操作的理解和应用。通过使用穿针引线法,我们可以高效地反转链表的指定部分。穿针引线法的核心思想是:找到反转部分的前一个节点,然后逐个反转链表节点,最后将反转后的链表与原链表连接起来。这种方法不仅适用于反转链表 II 问题,还可以应用于许多其他需要操作链表指定部分的场景。掌握链表操作的技巧,对于解决这类问题非常重要。

cannonjinx的博客 4615

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1510

LeetCode 92 Reverse Linked List II

LeetCode 92 Reverse Linked List II Problem Description: 给出两个值m和n,将链表中从第m到n个结点部分进行翻转,其余结点不变。 具体的题目信息: https://leetcode.com/problems/reverse-linked-list-ii/description/ Solution: 解题思路 本题用两个栈实现,临...

萤火虫啊飞呀飞 511

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode 92 Reverse Linked List II

Python C++ LeetCode 92 Reverse Linked List II

快递小可的博客 606

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

leetcode专题训练 92. Reverse Linked List II

这道题是第206题的升级版,与206题不同的是,这道题限制了反转的范围。 206题的代码如下: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode:

Ema1997的博客 385

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【leetcode】92. Reverse Linked List II

题目: Reverse a linked list from position m to n. Do it in one-pass. 思路: 思路很直观。首先找到将要reverse的链表部分。然后利用三个指针对这部分链表进行逆序变换。加了一个头结点superhead,这样操作起来更方便一些。其余都是编程细节了。 举两个例子,一个是一般情况下(只转换链表的某一部分),一个是特殊情况下(转换整个链表...

zxc120389574的博客 210

LeetCode92——Reverse Linked List II

链表逆置的变形,数据结构上学得是全局逆置,这里是局部逆置。

上善若水 981

Leetcode 92. Reverse Linked List II

题目描述:翻转一个链表的m到n位置,从第1开始数。 题目链接:Leetcode 92. Reverse Linked List II 代码如下 思路:要是不想再次遍历来拼接的话,需要在开始来进行一个记录拼接部分的开头和结尾。 /** * Definition for singly-linked list. * public class ListNode { * int val...

Za七杂⑧ 281

LeetCode 92: Reverse Linked List II题解(python)

Leetcode 92: Reverse Linked List II 分类:Linked List 难度:M 描述:类似于206:Reverse Linked List。不同的是,给了一个Linked List,给了两个数字,让把两个数字中间的链表反转。并且在一次扫描中完成任务。 Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NUL ...

Bourns_A的博客 534

LeetCode92 Reverse Linked List II

LeetCode92 Reverse Linked List II 问题来源LeetCode92 问题描述 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4,

yanqinghe123的专栏 236

LeetCode 92. Reverse Linked List II

Reverse a linked list from positionmton. Do it in one-pass. Note:1 ≤m≤n≤ length of list. Example: Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5-...

qq_39638957的博客 102

leetcode No92. Reverse Linked List II

Question: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note: Given m, 

Dufre 1074

LeetCode 92. 反转链表 II(Reverse Linked List II)

92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 LeetCode92. Reverse Linked List II中等 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4...

weixin_30629653的博客 219

LeetCode92. Reverse Linked List II

LeetCode92. Reverse Linked List II

bookman的博客 319

LeetCode题解之92. Reverse Linked List II

问题链接 英文网站:92. Reverse Linked List II 中文网站:92. 反转链表 II 问题描述 Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list. Ex

supermouse的博客 392
上一篇: 排序算法笔记
下一篇: sqlyog 到期怎么办
kotomi_du
博客等级 码龄10年 5粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值