29、链表-删除链表的倒数第N个结点

思路:

首先找到倒数第N个结点

  1. 第一种方式 先统计链表的节点数,然后再次遍历len-N即可得到倒数第N个结点,然后将前一个节点的next指针指向next的下一个节点
  2. 使用快慢指针,快指针先跑N个结点然后慢指针开始跑,等快指针到达尾节点后,慢指针的位置就是倒数第N个结点位置

代码如下:

/*** 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 removeNthFromEnd01(ListNode head, int n) {if (head == null) {return head;}List<ListNode> list = new ArrayList<>();while (head!=null){list.add(head);head=head.next;}list.remove(list.size()-n);if (list.isEmpty()){return null;}ListNode node=list.get(0);ListNode cur=node;for (int i = 1; i < list.size(); i++) {cur.next=list.get(i);cur=cur.next;}cur.next=null;return node;}//计数方式 删除倒数第n个 先算出 链表长度public static ListNode removeNthFromEnd02(ListNode head, int n) {if (head==null){return null;}int len=0;ListNode node=head;while (node!=null){len++;node=node.next;}if (n>len){return head;}if (n==len){return head.next;}//倒数第N个 就是整数len-n个ListNode cur=head;int index=0;while (cur!=null){//走到前一个节点时if (index==len-n-1){cur.next=cur.next.next;break;}cur=cur.next;index++;}return head;}//使用快慢指针  快指针先走n个节点  慢指针再开始走 当快指针到达null节点时候 慢指针正好到达倒数第n个节点//并且添加哑节点 来简化边界条件 防止如果删除的头节点问题public static ListNode removeNthFromEnd(ListNode head, int n) {if (head==null){return null;}ListNode dummy  = new ListNode(0, head);ListNode fast=dummy ;ListNode slow=dummy;for (int i = 0; i <= n; i++) {fast=fast.next;}while (fast!=null){slow=slow.next;fast=fast.next;}slow.next=slow.next.next;return dummy.next;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多因子模型的因子选取

经典的Alpha模型是一些多因子模型&#xff0c;用于预测Alpha模型的信息比率&#xff0c;从而来判断判断模型的好坏。这里我们所说的信息比率是相对收益率除以非系统性风险&#xff0c;所以当我们在进行因子选择的时候&#xff0c;我们一定不能选取系统性风险模型&#xff08;例…

免费VPS云服务器汇总,最长永久免费使用

目前云服务器市场竞争很激烈&#xff0c;为了方便吸引上云&#xff0c;很多云计算服务商提供免费试用云服务器&#xff0c;下面给大家整理汇总一下免费VPS云服务器&#xff0c;最长永久免费使用&#xff01; 一、雨云&#xff08;优惠码:ABC&#xff09; 活动地址&#xff1a;…

jquery如何在当前元素的前面添加一个同级子元素

在jQuery中&#xff0c;如果你想在当前元素的前面添加一个同级子元素&#xff0c;你可以使用.before()方法。但是&#xff0c;请注意&#xff0c;.before()方法实际上是在当前元素的前面插入内容&#xff0c;而不是作为它的子元素。如果你想在当前元素内部、但在其所有子元素之…

2D AI交互数字人:赋能文旅、金融、政务、教育行业数字化转型

AI交互数字人结合了语音合成、语音识别、语义理解、图像处理、机器翻译、虚拟形象驱动等多项AI核心技术&#xff0c;可以提供服务导览、业务咨询、语音互动交流、信息播报等智能服务。 其中&#xff0c;2D AI交互数字人是采集真人视频&#xff0c;通过AI训练&#xff0c;生成逼…

认识OpenEuler操作系统

引言 在信息技术日新月异的时代&#xff0c;开源软件已成驱动创新的核心动能&#xff0c;其中&#xff0c;OpenEuler作为一款冉冉升起的开源操作系统典范&#xff0c;凭借其对开源精神的坚守与技术创新的不懈追求&#xff0c;自亮相以来便引发了全球关注。本文将全方位深挖Open…

Xcode 15.0 新 #Preview 预览让 SwiftUI 界面调试更加悠然自得

概览 从 Xcode 15 开始&#xff0c;苹果推出了新的 #Preview 宏预览机制&#xff0c;它无论从语法还是灵活性上都远远超过之前的预览方式。#Preview 不但可以实时预览 SwiftUI 视图&#xff0c;而且对 UIKit 的界面预览也是信手拈来。 想学习新 #Preview 预览的一些超实用调试…

使用新一代一站式 AI Bot 开发平台扣子coze,搭建我的第一个AI Bot(前端魔法师) ,

目录 1.概述​ 2.功能与优势 3.使用扣子 4.人设与回复逻辑 5.添加插件 6.预览与调试 7.发布bot Store 8.环境大家体验&#xff08;给大家内置了比较屌的插件&#xff09; 9.推荐阅读&#xff1a; 1.概述​ 扣子是新一代一站式 AI Bot 开发平台。无论你是否有编程基础…

揭示API威胁的攻击趋势(下)

文章目录 前言三、行业趋势凸显供应链攻击危险1、案例研究2、API成为新的数据泄露载体四、提高可见性:管理API资产生命周期的关键1、照亮阴影2、实现文档化3、强化API态势4、加强威胁检测和响应5、发展更强大的进攻性方法前言 API是组织数字化转型的核心。然而,API的存在也增…

iOS------SDWebImage源码

一&#xff0c;简介 一个异步图片下载及缓存的库 特性&#xff1a; 一个扩展UIImageView分类的库&#xff0c;支持加载网络图片并缓存图片异步图片下载器异步图片缓存和自动图片有效期限管理支持GIF动态图片支持WebP背景图片减压保证同一个URL不会再次下载保证无效的URL不会…

Web前端 Javascript笔记3

1、垃圾回收机制 内存中的生命周期 1、内存分配 2、内存使用&#xff08;读写&#xff09; 3、内存回收&#xff0c;使用完毕之后&#xff0c;垃圾回收器完成 内存泄漏&#xff1a;该回收的&#xff0c;由于某些未知因素&#xff0c;未释放&#xff0c;叫做内存泄漏 栈&#xf…

构建CICD

由于公司要求构建自己的CICD流程&#xff0c;基于公司内部搭建的服务平台去搭建自动打包流程&#xff0c;在这个过程中遇到了几个节点记录一下。 公司内部号称有自己的一套软管平台&#xff0c;实际内核都是基于Jekins的一套机制&#xff0c;不同的是有些参数可以自定义&#…

leetcode46--全排列

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff1a;…

Vue新手入门

1 Vue概述 官网:https://cn.vuejs.org/ 1、什么是Vue.js Vue.js 是目前最火的一个前端框架&#xff0c;React是最流行的一个前端框架&#xff08;React除了开发网站&#xff0c;还可以开发手机App&#xff0c; Vue语法也是可以用于进行手机App开发的&#xff0c;需要借助于W…

C语言数组的初始化方法大全

在C语言中&#xff0c;数组初始化主要有以下几种方法&#xff1a; 1&#xff0e;完全初始化&#xff1a;在声明数组的同时给出数组所有元素的值。 int arr[5] {1, 2, 3, 4, 5}; // 初始化一个整型数组 2&#xff0e;部分初始化&#xff1a;只给数组的前面一部分元素赋值&am…

Bridge 桥接

意图 将抽象部分与其显示部分分离&#xff0c;使他们都可以独立地变化。 结构 其中&#xff1a; Abstraction定义抽象类的接口&#xff0c;维护一个指向Implementer类型对象的指针。RefinedAbstraction扩展由Abstraction定义的接口。Implementor定义实现类的接口&#xff0c…

React 19 的新增功能:Action Hooks

React 是前端开发领域最流行的框架之一。我喜欢 React 是因为它背后的团队和社区对它的热情。当社区提出新功能和改进的需求时&#xff0c;团队会倾听&#xff0c;React 的未来是令人兴奋和有趣的。 让我们来看一下 React 19 中令开发人员提升开发效率的新特性。对于每个钩子&…

关于项目打包

除了自己常用的那种方式&#xff0c;也可以直接在文件夹下执行命令。 如果当前项目聚合了其他子模块的话&#xff1a; 先清理&#xff0c;再打包&#xff0c;同时跳过测试 如果打包后&#xff0c;然后项执行某个模块&#xff0c;进入当前文件夹下直接java -jar 和jar包名执行就…

C++中的vector容器

一. 基本概念 1. 包含在头文件 #include <vector> 2. 功能: 模拟了一个动态数组 3. 底层实现 首先开辟一定大小的数组 随着元素的增加&#xff0c;如果空间不够之后 自动采取扩容机制 -> 自增长 扩容规则&#xff1a;以原空间大小的 2 倍重新开辟一块空间 将就空…

【SpinalHDL】Scala编程中的class及case class

本篇文章仅简单介绍在spinalhdl编程中遇到的比较常见的2中类定义方式&#xff1a;class及case class。对于不太了解JAVA或Scala编码又开始学习SpinalHDL的人进行入门介绍。 在 SpinalHDL 中&#xff0c;case class 和 class 都是用来定义数据结构或对象的关键字&#xff0c;它…

第五十二章 进程亲和性和状态感知模式(保留模式 1) - 启动状态感知模式

文章目录 第五十二章 进程亲和性和状态感知模式&#xff08;保留模式 1&#xff09; - 启动状态感知模式维护状态感知模式并响应错误终止状态感知模式 第五十二章 进程亲和性和状态感知模式&#xff08;保留模式 1&#xff09; - 启动状态感知模式 通过设置保留模式将会话标记…