126.删除链表的倒数第N个节点(力扣)

题目描述

代码解决(双指针)

/*** 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*dummyHead=new ListNode(0);dummyHead->next=head;ListNode*fast=dummyHead;ListNode*slow=dummyHead;while(n--&&fast!=nullptr){fast=fast->next;}fast=fast->next;while(fast!=nullptr){fast=fast->next;slow=slow->next;}slow->next=slow->next->next;return dummyHead->next;}};

这段代码是一个用于删除单向链表中倒数第n个节点的函数。让我们逐行来解释一下:

  1. ListNode是一个单向链表节点的结构体或类,假设它有一个整型的val成员和一个指向下一个节点的指针next

  2. class Solution定义了一个类,其中包含了公有的成员函数removeNthFromEnd,该函数接收一个指向链表头部的指针head和一个整数n,表示要删除倒数第几个节点。

  3. ListNode*dummyHead=new ListNode(0);创建了一个值为0的虚拟头节点dummyHead,这样做是为了方便处理边界情况,避免单独处理头节点的删除情况。

  4. dummyHead->next=head;将虚拟头节点的next指针指向实际的链表头节点head,这样做是为了保持链表的结构。

  5. ListNode*fast=dummyHead;ListNode*slow=dummyHead;创建了两个指针fastslow,初始都指向虚拟头节点,用来找到要删除的节点位置。

  6. while(n--&&fast!=nullptr)是一个循环,条件是n不为0且fast不为空。循环内部让fast指针往前移动,相当于让fast指针领先slow指针n个节点。

  7. fast=fast->next;在上面的循环结束后,再额外往前移动一步,以便让fast指向要删除节点的前一个节点,这样才能正确删除节点。

  8. 接下来是第二个循环while(fast!=nullptr),在这个循环中,fastslow指针一起往前移动,直到fast指向链表末尾的nullptr。

  9. slow->next=slow->next->next;这一行代码实际上删除了倒数第n个节点。它将slow指针的next指针直接指向了要删除节点的下一个节点,跳过了要删除的节点。

  10. 最后,return dummyHead->next;返回删除节点后的链表头节点,即实际链表的头节点。

这段代码利用了快慢指针的方法,在一次遍历中完成了删除倒数第n个节点的操作,时间复杂度为O(N),其中N是链表的长度。

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

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

相关文章

【QT教程】QT6信号与槽 QT信号与槽

QT6信号与槽 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视…

C++-Primer-Plus 习题解答(第十六章-string类和标准模板库)

题目:16.1 回文指的是顺读和逆读都一样的字符串。例如,“tot”和“otto”都 是简短的回文。编写一个程序,让用户输入字符串,并将字符串引用传 递给一个bool函数。如果字符串是回文,该函数将返回true,否则返…

全视通助力珠海市井岸镇卫生院新院,建设智慧病房

5月6日,位于珠海市斗门区的井岸镇卫生院新院正式启用,面向市民开诊。新院各诊区就医秩序井然,总体情况良好。据统计,截至开诊当天11点30分,新院门诊共接诊347人次,预防接种81人次,儿童体检33人次…

网络相关笔记

IPv4地址 IPv4地址通常以“点分十进制”形式书写,即四个0-255之间的十进制数,各数之间用英文句点(.)分隔,例如:192.0.2.1。总共32位的地址空间可以表示大约42亿个不同的地址。 IPv4地址结构包括&#xff…

HashSet扩容机制

HashSet底层是HashMap,第一次添加的时候,table数组扩容到16,临界值是16*加载因子(默认是0.75),到达临界值进行扩容。 HashSet<Integer> hashSet = new HashSet<>();hashSet.add(5);hashSet.add(2);hashSet.add(5);hashSet.add(8);hashSet.add(1);当new一个H…

【C++STL详解(十)】--------priority_queue的模拟实现

目录 前言 一、堆的向上调整算法 二、堆的向下调整算法 三、优先队列模拟实现 Ⅰ、接口总览 Ⅱ、各个接口实现 1.构造函数 2.仿函数 3.向上调整 4.向下调整 5.其余接口 Ⅲ、完成代码 前言 上节内容我们简单的介绍了关于priority_queue的使用内容&#xff0c;我们明白…

秒杀系统架构设计-01

前言 在当今互联网技术快速发展的背景下&#xff0c;电商平台的秒杀活动成为了一个热门话题。特别是对于技术人员而言&#xff0c;如何设计一个高效、可靠的秒杀系统架构&#xff0c;已经成为了面试中的常见问题。这篇博文将围绕秒杀系统架构设计的大纲和授课思路&#xff0c;…

【TypeScript高级类型简介以及使用方法】

TypeScript 的高级类型提供了更复杂的类型系统&#xff0c;允许开发者更精确地描述和约束代码中的数据类型。以下是几种常用的 TypeScript 高级类型及其简介和使用方法&#xff1a; 交叉类型&#xff08;Intersection Types&#xff09; 交叉类型是将多个类型合并为一个类型&…

Baidu Comate 编程插件:提升开发效率的利器

文章目录 引言简介目的 Baidu Comate插件概述定义与功能市场现状竞品分析 安装与配置VsCode 安装&#xff1a;注意事项 版本选择 核心特性详解功能介绍代码生成实时续写错误纠正 使用体验体验地址 引言 简介 基于文心大模型&#xff0c;结合百度积累多年的编程现场大数据和外…

三维dp,LeetCode 741. 摘樱桃

一、题目 1、题目描述 给你一个 n x n 的网格 grid &#xff0c;代表一块樱桃地&#xff0c;每个格子由以下三种数字的一种来表示&#xff1a; 0 表示这个格子是空的&#xff0c;所以你可以穿过它。1 表示这个格子里装着一个樱桃&#xff0c;你可以摘到樱桃然后穿过它。-1 表示…

设计一个people类 如何输入用户自定义个数的对象?

题目: 设计一个People 类&#xff0c;该类的数据成员有姓名、年龄、身高、体重和人数&#xff0c;其中人数为静态数据成员&#xff0c;成员函数有构造函数、显示和显示人数。其中构造函数由参数姓名、年龄、身高和体重来构造对象&#xff1b;显示函数用于显示人的姓名、年龄、…

PDF批量编辑:PDF转HTML批量操作技巧,提升文档格式转换效率

在数字化办公日益普及的今天&#xff0c;PDF&#xff08;Portable Document Format&#xff09;作为一种跨平台的文件格式&#xff0c;广泛应用于各种文档的存储和传输。然而&#xff0c;PDF文件的不可编辑性使得在某些情况下&#xff0c;我们需要将其转换为HTML格式以便更好地…

蓝桥杯备赛1.统计单词数

题目链接&#xff1a;P1308 [NOIP2011 普及组] 统计单词数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define int long long #define endl \n const int N 1e510; using namespace std; int a[N]; signed main() {std::ios::sync_with_st…

【国产SSL】哪家SSL证书可以保证数据不出境,是在国内验签

随着网络安全的重视&#xff0c;网站安装SSL证书已经是标配了。但是为什么目前常见的SSL证书都是国外的&#xff1f;数据受国外掌控&#xff0c;安全吗&#xff1f;那么哪家国产品牌是可以保证数据不出境的呢&#xff1f; 为什么目前常见的SSL证书都是国外的&#xff1f; 原因…

您的计算机已被360勒索病毒感染?恢复您的数据的方法在这里!

引言 .360勒索病毒&#xff0c;作为BeijingCrypt勒索病毒家族的一员&#xff0c;因其独特的加密技术和狡猾的传播方式&#xff0c;已成为网络安全领域的重大威胁。它不仅能加密用户的重要文件&#xff0c;使文件无法被正常访问和使用&#xff0c;还可能进一步破坏系统&#xf…

ssh连接服务器教程,账号密码登陆和通过密钥直接登陆

ssh如何连接服务器&#xff1f; 两种连接方式 通过账号密码登陆通过密钥直接登陆 通过账号密码登陆 在终端使用命令登陆&#xff1a;ssh [服务器用户名][服务器ip或服务器域名]之后输入服务器用户密码即可登陆 通过密钥直接登陆 首先在本地创建自己的私钥公钥&#xff0c…

Java苍穹外卖05-订单状态定时处理-数据统计-导出excel

一、订单状态定时处理 1.Spring Task ①介绍 应用场景&#xff1a; ②cron表达式 https://cron.qqe2.com/ ③入门案例 2.需求分析 3.代码开发 每一分钟检查是否存在超时15分钟的订单 每天凌晨一点处理上一条处于派送中的订单 mapper&#xff1a; 二、来单提醒、客户催单 1…

WPF (Windows Presentation Foundation) 中 Attribute(属性)和 Property(属性)

在 WPF (Windows Presentation Foundation) 中&#xff0c;Attribute&#xff08;属性&#xff09;和 Property&#xff08;属性&#xff09;是两个相关但不同的概念。 Attribute&#xff08;属性&#xff09;是一种元数据&#xff0c;用于给类型、成员或其他代码元素添加附加…

手撕C语言题典——移除链表元素(单链表)

目录 前言 一.思路 1&#xff09;遍历原链表&#xff0c;找到值为 val 的节点并释放 2&#xff09;创建新链表 二.代码实现 1)大胆去try一下思路 2&#xff09;竟然报错了&#xff1f;&#xff01; 3&#xff09;完善之后的成品代码 搭配食用更佳哦~~ 数据结构之单…

CellChat包文献介绍

Inference and analysis of cell-cell communication using CellChat - PubMed (nih.gov) 目录 在线数据 摘要 基础介绍 分析结果 1&#xff0c;概述 2&#xff0c;识别预测通路 3&#xff0c;连续的信号转导 4&#xff0c;预测空间共定位细胞群之间的关键信号转导事件…