当前位置: 首页 > article >正文

力扣刷题-热题100题-第29题(c++、python)

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/?envType=study-plan-v2&envId=top-100-liked

计算链表长度

对于链表,难的就是不知道有多少元素,所以先遍历一次链表得到元素个数,然后根据要删除的位置可以在再一次遍历时找到删除的元素的前一个元素位置。需要注意的是若要求删除的是第一个元素,因为第一个元素前没有 元素,所以不好操作,因此我们手动设置一个头指针指向第一个元素。

//c++
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* h=new ListNode(0,head);ListNode* a=h;int m=0;while(head){m=m+1;head=head->next;}for(int i=0;i<m-n;i++)  a=a->next;a->next=a->next->next;return h->next;}
};#python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:m=0h=headwhile h:m=m+1h=h.nexth=ListNode(0,head)a=hfor i in range(m-n):a=a.nexta.next=a.next.nextreturn h.next

有一种数据结构是后进先出,代入这道题完美适应,所以遍历链表,使元素入栈,注意这里也要加入头指针指向第一个元素,然后根据倒数第几个元素要删除的去出栈,最后选取栈顶元素也就是要删除元素的前一个元素进行 操作。

//c++
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* h=new ListNode(0,head);ListNode* a=h;stack<ListNode*> m;while(a){m.push(a);a=a->next;}for(int i=0;i<n;i++)  m.pop();ListNode* b=m.top();b->next=b->next->next;return h->next;}
};#python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:h=ListNode(0,head)a=hm=list()while a:m.append(a)a=a.nextfor i in range(n):m.pop()b=m[-1]b.next=b.next.nextreturn h.next

双指针

 最喜欢这个解法,巧妙,且只需遍历一次链表,虽然两次和一次也没差。。

要加头指针!

就是两个指针,并保证这两个指针中间间隔要求的倒数n个元素,然后在快的指针到达链表尾部时,慢的指针自然而然就在要删除元素的前一个元素的位置了。

//c++
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* h=new ListNode(0,head);ListNode* a=h;ListNode* b=head;for(int i=0;i<n;i++)  b=b->next;while(b){a=a->next;b=b->next;}a->next=a->next->next;return h->next;}
};#python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:h=ListNode(0,head)a=hb=headfor i in range(n):b=b.nextwhile b:a=a.nextb=b.nexta.next=a.next.nextreturn h.next

相关文章:

力扣刷题-热题100题-第29题(c++、python)

19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/?envTypestudy-plan-v2&envIdtop-100-liked 计算链表长度 对于链表&#xff0c;难的就是不知道有多少元素&#xff…...

NLP高频面试题(三十)——LLama系列模型介绍,包括LLama LLama2和LLama3

本文深入介绍Meta推出的LLama系列模型&#xff0c;包括LLama、LLama2和LLama3&#xff0c;探讨了它们的技术创新、应用场景以及对大语言模型发展的重要推动作用。通过系统地回顾各代模型的进化过程&#xff0c;分析其核心特性与技术亮点&#xff0c;为读者提供全面且深入的理解…...

torch.nn.Conv2d介绍——Pytorch中的二维卷积层

torch.nn.Conv2d是torch.nn模块中的二维卷积层类&#xff0c;用于构建神经网络中的二维卷积层。 1、基本语法 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)将 2D …...

阻止上传可执行程序

点击工具中的文件服务器资源管理器 、然后点击文件屏蔽管理中的文件屏蔽&#xff0c;然后导入目标文件选择要限制的属性即可...

DirectX修复工具免费版下载安装教程(附安装包)

文章目录 前言一、DirectX修复工具免费版介绍二、DirectX修复工具免费版安装教程1. 下载安装包2. 解压文件3. 以管理员身份运行4. 开始检测与修复5. 查看修复详情 前言 本教程主要介绍的是DirectX修复工具免费版下载安装教程&#xff0c;帮您轻松解决 DirectX 相关问题。 一、…...

UE5学习笔记 FPS游戏制作33 游戏保存

文章目录 核心思想创建数据对象创建UIUI参数和方法打开UI存档文件的位置可以保存的数据类型 核心思想 UE自己有保存游戏的功能&#xff0c;核心节点&#xff0c;类似于json操作&#xff0c;需要一个数据类的对象来进行保存和读取 创建存档 加载存档 保存存档 创建数据对象…...

Git与SVN的区别以及各自的优势

前言&#xff1a;版本控制的诞生与意义 在软件开发的漫长历程中&#xff0c;代码的迭代与协作始终是核心挑战。从早期的“文件夹版本”到现代的分布式系统&#xff0c;版本控制系统&#xff08;VCS&#xff09;的进化史&#xff0c;本质上是人类对协作效率与数据安全的不懈追求…...

PipeWire 音频设计与实现分析三——日志子系统

日志子系统 PipeWire 的日志子系统的设计分为多个层次。PipeWire 用 struct spa_log 对象描述日志组件&#xff0c;用 struct spa_log_methods 对象描述日志组件打印各层级日志的多个方法。PipeWire 为日志子系统添加了 topic 机制&#xff0c;不同文件中的日志按功能以不同的…...

TypeScript vs. JavaScript:技术对比与核心差异解析

引言 在 Web 前端开发领域&#xff0c;JavaScript&#xff08;JS&#xff09;长期占据主导地位&#xff0c;但随着项目复杂度的提升&#xff0c;开发者逐渐面临维护性差、协作困难等问题。TypeScript&#xff08;TS&#xff09;作为 JavaScript 的超集&#xff0c;通过静态类型…...

关于 @Autowired 和 @Value 使用 private 字段的警告问题分析与解决方案

问题背景 在使用 Spring 框架进行开发时&#xff0c;我们经常会使用 Autowired 和 Value 注解来进行依赖注入和属性值注入。然而&#xff0c;当我们将这些注解应用于 private 字段时&#xff0c;IDE&#xff08;如 IntelliJ IDEA&#xff09;可能会显示警告信息&#xff0c;提…...

MySQL 进阶 面经级

会用数据库&#xff0c;找大厂工作是远远不够的。 本人2025美团暑期AI面试好几个MySQL场景问题不会答&#xff0c;已脏面评。遂在此整理学习&#xff01; 文章目录 分片分区分区语法范围分区 &#xff08;RANGE Partitioning&#xff09;列表分区&#xff08;LIST Partitionin…...

《C奥林匹斯宝典:基础篇 - 重载函数》

一、重载函数 &#xff08;一&#xff09;函数模板重载 详细解析&#xff1a;函数模板提供了一种通用的函数定义方式&#xff0c;可针对不同类型进行实例化。当存在函数模板与普通函数、其他函数模板同名时&#xff0c;就构成了函数模板重载。编译器在编译阶段&#xff0c;依…...

【408--考研复习笔记】计算机网络----知识点速览

目录 一、计算机网络体系结构 1.计算机网络的定义与功能&#xff1a; 2.网络体系结构相关概念&#xff1a; 3.OSI 七层模型与 TCP/IP 模型&#xff1a; 4.通信方式与交换技术&#xff1a; 电路交换 报文交换 分组交换 5.端到端通信和点到点通信&#xff1a; 6.计算机…...

TiDB 可观测性解读(二)丨算子执行信息性能诊断案例分享

导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据&#xff0c;让架构师更简单、高效地定位问题、分析问题、解决问题&#xff0c;已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数&#xff0c;帮助大家更好地观测系统的状…...

15:00开始面试,15:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…...

蓝桥杯准备(前缀和差分)

import java.util.Scanner; public class qianzhuihe {public static void main(String[] args) {int N,M;Scanner scnew Scanner(System.in);Nsc.nextInt();Msc.nextInt();int []treesnew int[N1];//设为N1的意义&#xff0c;防止越界int []prefixSumnew int[N1];for(int i1;i…...

试用thymeleaf引入vue-element-admin(一)

作为后端程序员&#xff0c;一直使用springbootbootstarp做管理系统&#xff0c;对前端不是太了解&#xff0c;现在感觉bootstarp的admin ui一直不得劲&#xff0c;想切换成前端使用较多的ui&#xff0c;费了老鼻子劲。 我的目的不是前后端分离&#xff0c;而是一个人全栈&…...

Minimind 训练一个自己专属语言模型

发现了一个宝藏项目&#xff0c; 宣传是完全从0开始&#xff0c;仅用3块钱成本 2小时&#xff01;即可训练出仅为25.8M的超小语言模型MiniMind&#xff0c;最小版本体积是 GPT-3 的 17000&#xff0c;做到最普通的个人GPU也可快速训练 https://github.com/jingyaogong/minimi…...

C++11QT复习 (七)

智能指针雏形 **Day7-1 智能指针雏形&#xff1a;独占语义与共享语义****1. 独占语义与共享语义****1.1 Circle 类&#xff1a;示例类** **2. 拷贝构造&#xff1a;独占语义&#xff08;Unique Ownership&#xff09;****2.1 代码解析** **3. 拷贝构造&#xff1a;共享语义&…...

STM32八股【5】----- TIM定时器

1. TIM定时器分类 STM32 的定时器主要分为以下几类&#xff1a; 高级定时器&#xff08;Advanced TIM&#xff0c;TIM1/TIM8&#xff09; 具备 PWM 生成、死区控制、互补输出等高级功能&#xff0c;适用于电机控制和功率转换应用。通用定时器&#xff08;General-purpose TIM…...

单元测试之Arrange-Act-Assert(简称AAA)

Arrange-Act-Assert&#xff08;简称AAA&#xff09;是一种编写单元测试的标准模式&#xff0c;具有清晰的结构和明确的步骤&#xff0c;有助于提高测试的可读性、可维护性和可扩展性。以下是对每个步骤的详细说明&#xff1a; 1. Arrange&#xff08;准备阶段&#xff09; 在…...

厘米级定位赋能智造升级:品铂科技UWB技术驱动工厂全流程自动化与效能跃升”

在智能制造中的核心价值体现在‌高精度定位、流程优化、安全管理‌等多个维度&#xff0c;具体应用如下&#xff1a; 一、‌核心技术与定位能力‌ ‌厘米级高精度定位‌ UWB技术通过‌纳秒级窄脉冲信号‌&#xff08;带宽超500MHz&#xff09;实现高时间分辨率&#xff0c;结合…...

C++刷题(四):vector

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及刷题记录&#xff0c;使用语言为C。 每道题我会给出LeetCode上的题号&#xff08;如果有题号&#xff09;&#xff0c;题目&#xff0c;以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…...

学习记录706@微信小程序+springboot项目 真机测试 WebSocket错误: {errMsg: Invalid HTTP status.}连接不上

我微信小程序springboot项目 真机测试 websocket 总是报错 WebSocket错误: {errMsg: Invalid HTTP status.}&#xff0c;总是连接不上&#xff0c;但是开发者工具测试就没有问题。 最后解决方案是编码token&#xff0c;之前是没有编码直接拼接的&#xff0c;原因不详。 consol…...

【虚拟仪器技术】Labview虚拟仪器技术应用教程习题参考答案[13页]

目录 第1章 第2章 第3章 第4章 第&#xff15;章 第&#xff16;章 第&#xff17;章 第8章 第1章 1. 简述虚拟仪器概念。 参考答案&#xff1a;虚拟仪器是借助于强大的计算机软件和硬件环境的支持&#xff0c;建立虚拟的测试仪器面板&#xff0c;完成仪器的控制、数…...

【工作梳理】怎么把f12里面的东西导入到postman

postman左上角导入 结果&#xff1a;...

UE5学习笔记 FPS游戏制作34 触发器切换关卡

文章目录 搭建关卡制作触发器传送门显示加载界面 搭建关卡 首先搭建两个关卡&#xff0c;每个关卡里至少要有一个角色 制作触发器传送门 1 新建一个蓝图&#xff0c;父类为actor&#xff0c;命名为portal&#xff08;传送门&#xff09; 2 为portal添加一个staticMesh&#…...

智谱大模型(ChatGLM3)PyCharm的调试指南

前言 最近在看一本《ChatGLM3大模型本地化部署、应用开发和微调》&#xff0c;本文就是讨论ChatGLM3在本地的初步布设。&#xff08;模型文件来自魔塔社区&#xff09; 1、建立Pycharm工程 采用的Python版本为3.11 2、安装对应的包 2.1、安装modelscope包 pip install model…...

新专栏预告 《AI大模型应知应会短平快系列100篇》 - 整体规划设计

做个预告&#xff0c;为系统化梳理AI大模型的发展脉络&#xff0c;并为普及AI素养做一点贡献&#xff0c;特给自己制定了一个小目标&#xff0c;3个月内完成交稿。 AI大模型应知应会短平快系列100篇 - 整体规划设计 一、基础知识模块&#xff08;20篇&#xff09; 1.1 大模型…...

SwanLab Slack通知插件:让AI训练状态同步更及时

在AI模型训练的过程中&#xff0c;开发者常常面临一个难题&#xff1a;如何及时跟踪训练状态&#xff1f;无论是实验超参数的调整、关键指标的变化&#xff0c;还是意外中断的告警&#xff0c;传统的监控方式往往依赖手动刷新日志或反复检查终端&#xff0c;这不仅效率低下&…...