算法——删除链表的倒数第N个节点(leetcode19)

对于这道题我首先想到的是双指针并且也正确解答了后发现其实我写的代码冗余了依然可以优化代码为单指针即可解题但看了题解之后发现快慢指针非常巧妙代码也非常简洁

单指针解法

1、定义一个虚拟节点vNode指向头结点

2、定义指针cur指向虚拟节点vNode

3、遍历链表得到链表的长度len

4、自定义变量m=len-n(也就是需

要删除的链表正数第m个节点的前一个节点)

5、移动cur指针至第m个节点

6、令cur指向需要删除节点的后一个节点即可也就是cur.next=cur.next.next

7、返回vNode.next即可解题

/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {int len = 0;ListNode cur = head;while (cur != null) {len++;cur = cur.next;}int m = len - n;ListNode vNode = new ListNode();vNode.next = head;cur = vNode;for(int i=0;i<m;i++){cur=cur.next;}cur.next=cur.next.next;return vNode.next;}
}

快慢指针解法 

1、定义虚拟节点vNode指向头结点

2、定义快慢指针fastIndex、slowIndex指向虚拟节点

3、令fastIndex移动n+1个单位

4、令fastIndex和slowIndex同步向后移动直至fastIndex指向null(此时slowIndex在删除节点的前一个节点)

5、令slowIndex.next=slowIndex.next.next

6、返回vNode.next即可解答

/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode vNode=new ListNode();vNode.next=head;ListNode fastIndex=vNode;ListNode slowIndex=vNode;for(int i=0;i<n+1;i++){fastIndex=fastIndex.next;}while(fastIndex!=null){fastIndex=fastIndex.next;slowIndex=slowIndex.next;}slowIndex.next=slowIndex.next.next;return vNode.next;}
}

总结:快慢指针中的fastIndex向后移动n+1个单位后那么slowIndex与fastIndex之间的间隔节点数是固定的所以当fastIndex指向null的时候slowIndex所指向的位置也就是从fastIndex开始往后数第n+1个节点的位置也就是删除节点的前一个位置这样就可以巧妙的删除节点了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19452.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

android:taskAffinity 对Activity退出时跳转的影响

android:taskAffinity 对Activity跳转的影响 概述taskAffinity 的工作机制taskAffinity对 Activity 跳转的影响一个实际的开发问题总结参考 概述 在 Android 开发中&#xff0c;任务栈&#xff08;Task&#xff09;是一个核心概念。它决定了应用程序的 Activity 如何相互交互以…

运算放大器的学习(三)增益带宽积

我们接着了解运放的相关指标参数&#xff0c;下面我们看下增益带宽积与压摆率. 增益带宽积:即电压增益&#xff08;Gain&#xff09;和带宽&#xff08;Bandwidth&#xff09;的乘积是一个常数&#xff0c;称为增益带宽积&#xff08;Gain Bandwidth Product&#xff09;. 增益…

ThinkPHP6门面(Facade)

门面 门面&#xff08;Facade&#xff09; 门面为容器中的&#xff08;动态&#xff09;类提供了一个静态调用接口&#xff0c;相比于传统的静态方法调用&#xff0c; 带来了更好的可测试性和扩展性&#xff0c;你可以为任何的非静态类库定义一个facade类。 系统已经为大部分…

【概率论】概率密度到底是什么

1. 书本上的定义&#xff1a; 如果对于随机变量X的分布函数F(X)&#xff0c;存在一个非负可积函数f(x)&#xff0c;使得任意实数x&#xff0c;都有&#xff1a; 称X为连续型随机变量&#xff0c;函数f(x)称为X的概率密度 所谓的概率密度&#xff0c;就是 概率/区间长度 &#…

线代笔记期末复习

第一讲行列式的计算 基础定义和规则 ps&#xff1a; 交换时不止行可以交换&#xff0c;列方便时也可以 我的第一作法&#xff1a;是把行相加&#xff0c;然后后续无差别 范德蒙行列式的计算&#xff1a; 要求第一行/列全为1 每个公比元素作差再相乘 爪型 步骤&#xff1a;…

javaweb快速入门 - 01

1.基本概念 web开发&#xff1a; web&#xff0c;网页的意思 &#xff0c; www.baidu.com静态web html&#xff0c;css提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人看的数据始终会发生变化&#xf…

计算机网络学习笔记-6.应用层

文章目录 客户端-服务器模型&#xff08;C/S&#xff09;对等网络模型&#xff08;P2P&#xff09;DNS&#xff08;域名系统&#xff09;文件传输协议&#xff08;FTP&#xff09;FTP的基本功能&#xff1a;FTP的工作原理&#xff1a; 万维网&#xff08;WWW&#xff09;URL万维…

使用IDE实现java端远程调试功能

使用IDE实现java端远程调试功能 1. 整体描述2. 前期准备3. 具体操作3.1 修改启动命令3.2 IDE配置3.3 打断点3.4 运行Debug 4. 总结 1. 整体描述 在做项目时&#xff0c;有些时候&#xff0c;需要和第三方进行调式&#xff0c;但是第三方不在一起&#xff0c;需要进行远程调试&…

241118学习日志——[CSDIY] [InternStudio] 大模型训练营 [07]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

简单爬虫的实现

以下是一个简单爬虫代码的实现&#xff1a; import requests from bs4 import BeautifulSoup# 生成一个包含多个网页 URL 的列表 # 这里我们构造了 50 个页面的 URL&#xff0c;假设网站有多页内容&#xff0c;页数从 1 到 50 urls [f"https://www.cnblogs.com/#p{i}&qu…

RNN简单理解;为什么出现Transformer:传统RNN的问题;Attention(注意力机制)和Self-Attention(自注意力机制)区别;

目录 RNN简单理解 RNN n to n Transformer N to M LSTM 为什么出现Transformer:传统RNN的问题 信息丢失的后果 Rnn是顺序执行的效率不高:顺序执行 Attention(注意力机制)和Self-Attention(自注意力机制)区别 一、计算对象不同 二、应用场景不同 三、功能差异…

小熊派Nano|HarmonyOS初体验-LiteOS内核

在这个万物互联的时代&#xff0c;操作系统作为连接硬件与应用的桥梁&#xff0c;其重要性不言而喻。华为推出的HarmonyOS&#xff08;鸿蒙操作系统&#xff09;&#xff0c;自诞生以来便备受瞩目&#xff0c;它不仅承载着华为对未来智能生态的愿景&#xff0c;更以其独特的分布…

Linux基础(二十一)——认识系统服务(daemons)

认识系统服务 &#xff08; daemons&#xff09; 1.daemon 与服务 &#xff08; service&#xff09;2. systemd3. systemctl4. systemctl 配置文件 1.daemon 与服务 &#xff08; service&#xff09; 在 Linux 和类 Unix 系统中&#xff0c;daemon&#xff08;守护进程&…

QT QChart+Eigen库绘制线性回归散点图

QChart+Eigen库绘制线性回归散点图 老套路,一图胜千言 项目结构 代码 mainwindow.h #ifndef MAINWINDOW_H #

uniapp开发微信小程序笔记4-自定义组件

前言&#xff1a;本文重点记录的是uniapp如何封装一个自定义组件&#xff0c;以swiper组件为例。 一、创建组件目录 官方文档中的easycom组件规范中可以看到这样一句话&#xff1a; 只要组件安装在项目的components目录下或uni_modules目录下&#xff0c;并符合components/组…

(三)反向传播 Backpropagation

文章目录 反向传播Backpropagation&#xff08;1&#xff09;Chain Rule&#xff08;2&#xff09;Forward pass和Backward pass 反向传播Backpropagation 对于计算Gradient Descent这件事情&#xff0c;我们的neural network是有非常非常多的参数&#xff0c;可能有上百万个参…

Dowex 50WX8 ion-exchange resin可以用于去除水中的金属离子(如钠、钾、镁、钙等)和其他杂质,提高水质,11119-67-8

一、基本信息 中文名称&#xff1a;Dowex 50WX8 离子交换树脂 英文名称&#xff1a;Dowex 50WX8 ion-exchange resin CAS号&#xff1a;11119-67-8 供应商&#xff1a;陕西新研博美生物科技 外观&#xff1a;米色至浅棕色或绿棕色粉末/微球状 纯度&#xff1a;≥95% 分子…

国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程

在当今数字化、网络化的视频监控领域&#xff0c;大中型项目对于视频监控管理平台的需求日益增长&#xff0c;特别是在跨区域、多设备、高并发的复杂环境中。EasyCVR视频监控汇聚管理平台正是为了满足这些需求而设计的&#xff0c;它不仅提供了全面的管理功能&#xff0c;还支持…

一家餐饮企业,「闯入」AI阵地

作者| 皮爷 出品|产业家 “我们需要用AI来帮助我们门店破除内卷的状态。”一位连锁餐饮品牌告诉产业家&#xff0c;“这也是我们想尽快把AI用起来的原因&#xff0c;看看能不能带来一些帮助。” 这种情况正发生在一众餐饮企业中。 与这种情况对应的一个背景是&#xff0c…

基于YOLOv8深度学习的智慧社区建筑外墙破损(裂缝、露筋、剥落)检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧社区的发展&#xff0c;对建筑结构健康状况的实时监测变得愈发重要。在此背景下&#xff0c;建筑外墙破损&#xff08;如裂缝、露筋和剥落&#xff09;等问题对建筑物整体结构的安全性和耐久性构成了严重威胁&#xff0c;及时、准确地检测这些问题变得尤为关键。传统的…