【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点
目录
一.【Leetcode203】移除链表元素
1.链接
2.题目再现
A.双指针法
B.类尾删法
C.哨兵位
二.【Leetcode876】链表的中间节点
1.链接:链表的中间节点
2.题目再现
3.解法:快慢指针
三.链表中倒数第k个节点
1.链接:链表中倒数第k个节点
2.题目再现
3.解法 :快慢指针
一.【Leetcode203】移除链表元素
1.链接
移除链表元素
2.题目再现
A.双指针法
1.创建一个指针 cur=head 和一个指针 pre=NULL;
2.用cur->val 与 val 比较,如果不相等则把 cur 赋给 pre 使cur 指向下一个节点,即
cur=cur->next;
3.如果相等则使 pre 的 next 指向 cur 的 next ,即:
pre->next=cur->next ,然后再 free 掉 cur ,最后再使 cur 等于 pre 的 next,注意在进行这些步骤之前要判断 pre 是否为空 ,若为空即为头删;
演示:
双指针
代码:
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode*pre=NULL;struct ListNode*cur=head;while(cur){if(cur->val!=val){pre=cur;cur=cur->next;}else {if(pre==NULL){head=cur->next;free(cur);cur=head;}else {pre->next=cur->next;cur=pre->next;}}}return head;
}
B.类尾删法
1.创建一个新的指针newhead ,同时为了省去找尾的麻烦,我们可以定义一个尾指针 tail 来保存尾节点;
2.再创建一个指针 cur =head ,用来遍历链表;
3.如果 cur->val != val ,则尾插 ,注意要判断 tail 是否为空 ,类似于单链表的尾插那部分,如果不理解的话,可查看文章 :单链表的增删查改;
4.如果 cur->val ==val,则 cur=cur->next ;
5.最后要将尾节点置空。
演示:
类尾插
代码:
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode *newhead=NULL;struct ListNode*tail=NULL;struct ListNode*cur=head;while(cur){if(cur->val!=val){if(tail==NULL){newhead=tail=cur;}else {tail->next=cur;tail=tail->next;}cur=cur->next;}else{cur=cur->next;}}if(tail){tail->next=NULL;}return newhead;
}
C.哨兵位
1.malloc 一个哨兵位节点 dummyhead,使其 next 指向 head ;
2.再定义一个节点 tmp = dummyhead ,用这个遍历链表;
3.注意因为 tmp ->next 才是 head ,所以 while 里要写 tmp->next !=NULL
演示:
移除链表元素 哨兵位法动态演示
代码:
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode*dummyhead=(struct ListNode*)malloc(sizeof(struct ListNode));dummyhead->next=head;struct ListNode*tmp=dummyhead;while(tmp->next!=NULL){if(tmp->next->val==val){tmp->next=tmp->next->next;}else {tmp=tmp->next;}}return dummyhead->next;
}
二.【Leetcode876】链表的中间节点
1.链接:链表的中间节点
2.题目再现
3.解法:快慢指针
1.定义一个快指针 fast 和一个慢指针 slow 都初始化为 head;
2.遍历链表,快指针一次走2步,慢指针一次走1步 ;
3.注意:因为链表的长度可能是单数也可能是双数,所以当我们已 fast 是否为NULL 作为循环控制条件的话,要在 fast 走2步前判断 fast->next 是否为空;
4.最后慢指针就是中间节点。
演示:
链表中间节点 快慢指针动态演示
代码:
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode*slow=head;struct ListNode*fast=head;while(fast){if(fast->next==NULL) //注意判断{break;}else{fast=fast->next->next; //fast 走2步}slow=slow->next; //slow 走1步}return slow; //返回慢指针
}
三.链表中倒数第k个节点
1.链接:链表中倒数第k个节点
2.题目再现
3.解法 :快慢指针
1.定义一个快指针 fast 和一个慢指针 slow 都初始化为 head;
2.因为倒数第k个节点和尾节点的差为 k-1 ,所以我们先让快指针先走 k-1 步;
或者因为尾节点所指向的NULL 和倒数第k个节点相差k,也可以先让快指针走k步;
这个时候慢指针不动;
3.快指针走完后,快指针和慢指针依次走,每次只走1步;
注意,如果是k-1,那么遍历结束的条件是fast->next 是否为空 ,如果是k,那么遍历结束的条件是fast 是否为空;
4.返回慢指针。
演示:
链表倒数第K个节点 快慢指针动态演示
代码:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{if(pListHead==NULL){return NULL;}struct ListNode*slow=pListHead;struct ListNode*fast=pListHead;while(k--) //这里以先走k步为例{if(fast==NULL){return NULL;}fast=fast->next;}while(fast){slow=slow->next;fast=fast->next;}return slow;
}
😽本篇文章到此就结束了,若有错误或是建议,欢迎小伙伴们指出;😻
😍请多多支持博主哦~🥰
🤩谢谢你的阅读~😃
相关文章:
【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点
目录 一.【Leetcode203】移除链表元素 1.链接 2.题目再现 A.双指针法 B.类尾删法 C.哨兵位 二.【Leetcode876】链表的中间节点 1.链接:链表的中间节点 2.题目再现 3.解法:快慢指针 三.链表中倒数第k个节点 1.链接:链表中倒数第k个…...
快速上手配置firewalld
firewalld使用firewall-cmd命令配置策略。 查看当前firewalld当前服务运行状态 firewall-cmd --state firewalld防火墙状态还用使用如下命令查看状态 systemctl status firewalld 查看所有打开运行的端口 firewall-cmd --zonepublic --list-ports 查看区域信息情况 firewall…...
treap使用mt19937会导致问题原因分析
Treap 是一种使用随机数生成器来维护树形结构的数据结构,而 mt19937 是一种常用的伪随机数生成器。虽然 mt19937 可以生成高质量的随机数序列,但是在 Treap 中使用它可能会导致一些问题。 mt19937 返回的是一个 unsigned int 其中一个问题是࿰…...
tmux和vim
tmux 作用 分屏 允许断开Terminal连接后继续运行进程 结构 一个tmux可以开一堆session tmux: session 1, session 2, session 3 … Session: window 1, window 2, window 3… Window: pane 1, pane 2, pane 3… pane是最小单位,用shell语言编程 操作 输入…...
2023年全国最新保安员精选真题及答案12
百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 121.《保安员证》是经由设区的()单位进行发放。 A:市级人民政…...
Hbase的基本概念与架构
一、Hbase的概念 HBase是Hadoop的生态系统,是建立在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,通过利用Hadoop的文件系统提供容错能力。如果你需要进行实时读写或者随机访问大规模的数据集的时候,请考虑使用H…...
颠覆你的认知,业务同事都能开发软件,我简直无地自容……
经常看到网络鼓吹业务人员也能搭建应用,本是嗤之以鼻、半信半疑,但当这件事真实发生在自己身上时,竟觉得此言不虚? 一、背景 最近公司为了集成系统、提升扩展能力,引进了低代码平台JNPF,说个题外话&#…...
01 | n2n虚拟局域网
1 n2n简介 为了满足两个不同局域网的机器进行通信,让不同网段的机器能够进行P2P( 点对点 peer-to-peer ) 通信。2 n2n源码 https://github.com/ntop/n2n.git3 n2n名词 3.1 SuperNode 超级节点 SuperNode 相当与注册中心, 它会记录边缘节点的连接信息,…...
MFC界面控件BCGControlBar v33.4 - 支持Win 11 Mica material主题
BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materia…...
手把手教你用js实现手机通讯录功能(附源码)
js实现手机通讯录效果图需求需求一:锚点通过#id配合a标签使用css中scroll-behavior属性的使用需求二需求三获取汉字拼音的首字母方法1:使用插件,这里推荐pinyin-pro方法2:使用unicode去重数组中冗余的对象法一:用Map去…...
【C/C++】逗号表达式、算术运算符优先级
一、逗号表达式 1、如下图中代码,为变量d赋值,d的值为逗号表达式中的哪一个呢? 运行结果:d的值为6 2、再举个例子 运行结果:d的结果还是6 3、再举个例子 运行结果 以上面三种不同的逗号表达式为例,…...
携禾生物面试总结
面试时间: 2022年2月3日 1.项目C11的特性具体有用到哪些? 智能指针 lambda表达式 auto unordered_map 2.智能指针用到了哪几种智能指针 3.shared_ptr和weak_ptr区别 4.多线程实现方式 prosix线程》pthread windows的_beginthreaex MFC多线程 ACEM中…...
FPGA纯verilog手写HDMI发送IP 提供源码和技术支持
目录1、前言2、设计思路和框架TMDS 编码算法OSERDESE串并转换3、顶层源码和IP封装4、源码和IP获取1、前言 本设计使用Xilinx原语和自己手写的代码实现了HDMI发送功能,纯verilog手写,有源码,也提供封装好的IP,你喜欢用例化的方式就…...
【知识点】OkHttp 原理 8 连问
前言OkHttp可以说是Android开发中最常见的网络请求框架,OkHttp使用方便,扩展性强,功能强大,OKHttp源码与原理也是面试中的常客但是OKHttp的源码内容比较多,想要学习它的源码往往千头万绪,一时抓不住重点.本文从几个问题…...
【python】深入了解Selenium-PageObject
1、PageObject 定义 Page Object(简称PO)模式,是Selenium实战中最为流行,并且是自动化测试中最为熟悉和推崇的一种设计模式。在设计自动化测试时,把页面元素和元素的操作方法按照页面抽象出来,分离成一定的对象,然后再…...
PAT——7-4 简易测谎 (20 分)
测谎通常使用一套准备好的问题提问被测试者,通过分析被测试者的反应得到结果。比较高级的测谎技术会使用测谎仪,监视被测试者的生理活动状况。我们这里的简易测谎则是通过对问题答案的特征分析来做出判断。 首先我们要求被测试者做完 N 道单选题&#x…...
【力扣】 面试题 05.02.二进制数转字符串(超过c++100%)
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。示例1:输入:0.625输出:"0.10…...
软件质量保证与测试 课堂笔记
...
Costco好市多验厂百问百答
【Costco好市多验厂百问百答】美国仓储式超市Costco,中文好市多,近几年发展势头迅猛,大有赶超传统商超巨头沃尔玛之势。之前有出口企业反馈,Costco采购不仅量大,而且价格好,所以Costco成为国内出口企业纷纷…...
Nginx 通过 header 中的标识进行分发
Nginx可以根据请求头中自定义的标识将请求分发到不同的服务器。具体来说,可以使用map指令将请求头中的自定义标识映射为不同的后端服务器地址,然后使用proxy_pass指令将请求转发到对应的后端服务器。 以下是一个示例配置文件: http {map $h…...
如何实现《电子签名法》要求的可靠电子签名?
电子文档的电子签名怎么弄?我们在工作中经常需要在一些Word、pdf等电子版文件中插入签名,而很多人可能不知道,电子签名怎么弄?怎么做电子签名才有效?电子印章或签名图片属于电子签名吗?当工作或商务交易中&…...
工程项目管理软件有哪些?这六款很好用!
工程项目管理软件哪个好用?这六款很不错! 在现代社会中,软件已经成为了企业信息化、项目管理等方面必不可少的工具。尤其是对于工程项目管理而言,借助软件进行协同、计划、控制等方面的工作,已经成为了必要的手段。但…...
多看看spdk代码学习
多看看spdk代码学习还是干货直接上代码简易讲解详细讲解一下这份代码还是干货直接上代码 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <signal.h> #include <stdbo…...
宾语从句it做形式主语的句子
It代替从句作形式主语的常见句型 一、it 代替连词 that 引导的从句作形式主语。 1、it be 过去分词 that 从句: It’s said that Tom has come back from abroad . It was reported that dozens of children died in the accident . 可用于该句型的过去分词还有…...
【C#基础】C# 文件与IO
序号系列文章9【C# 基础】C# 异常处理操作10【C#基础】C# 正则表达式11【C#基础】C# 预处理器指令文章目录前言1,文件和IO的概念2,文本文件操作2.1 File 类2.2 FileInfo 类2.3 FileStream 类2.4 StreamReader 类2.5 StreamWriter 类FileStream 和 Stream…...
死锁相关介绍【内含哲学家就餐问题】
死锁 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 场景1:一个线程,一把锁 一个线程,一把锁,线程…...
Java的Groovy执行器内存泄露(MetaSpace)问题分析与解决办法
环境与背景 在java程序中通过GroovyScriptEvaluator执行器创建脚本Script对象调用Groovy脚本语言来完成某些功能, ,会通过AppClassLoader或者GroovyClassLoader去生产一个随机的名称的Groovy的Script类对象,导致元数据,产生的class类会被AppClassLoader或者GroovyClassLoader内…...
【linux】进程信号——信号的产生
进程信号一、信号概念1.1 信号理解二、产生信号2.1 通过键盘产生信号2.2 捕捉信号自定义signal2.3 系统调用接口产生信号2.3.1 向任意进程发送任意信号kill2.3.2 给自己发送任意信号raise2.3.3 给自己发送指定信号abort2.3.4 理解2.4 硬件异常产生信号2.4.1 除0异常2.4.2 野指针…...
部署OpenStack
部署 1. 环境配置 配置主机名 使用CRT软件连接controller节点和compute节点,用户名默认为root,密码默认为000000。连接上之后,使用linux命令修改节点主机名。 [rootcontroller ~]# hostnamectl set-hostname controller [rootcontroller …...
Java 运算符与类型转化
Java 运算符与类型转化 1 算术运算符 Java中的算术运算符主要有(加)、-(减)、*(乘)、/(除)、%(求余),它们都是二元运算符。 2 自增和自减运算…...
官方网站建设公司排名/seo快速排名优化公司
dubbo 2.8.4 出现找不到dubbo:annotation的错误,其实这个不会影响程序正确的运行,但是看到有红叉心里肯定非常不爽: 解决办法是,将dubbo-2.8.4.jar包,后缀改成.zip,然后解压: 如果不想对xml进行…...
做网站开发数据库怎么写/百度搜索量最大的关键词
最近学了图的遍历,关于其中的算法详情请见此处 关于深搜和广搜是非常重要的,对一些矩阵和图的遍历起到不错的作用。下面以一些题目来训练,其中每道题都尽量给出深搜和广搜的2种做法。 总结:深搜类似于递归(毕竟需要回溯…...
wordpress更换域名所有页面404/企业网站的搜索引擎推广与优化
概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序。 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中运行Spark程序.第二部分,将开发程序提交到Spark local或者hadoop YARN…...
h5制作方法/seo网站优化方案摘要
文章目录第一题、01-Number-sequence第二题.02-Number Sequence - Part 2第三题:NUMBER SEQUENCE – PART 3第四题:NUMBER SEQUENCE – PART 4第五题:第六题:17-templer-03-en1.lab2的内容为上次课堂练习的内容,把做过…...
汽车建设网站开发流程/百度seo排名优
Java NIO(New I/O)的三个属性position、limit、capacity 在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪: capacitypositionlimitposition和limit的含义取决于Buffer处在读模式还是写…...
怎么做qq代刷网站/seo体系
第一题 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 使用继承Thread类的方式创建一个名为 ThreadClassOne 的类,重写的run方法需要实现输出0-10之间的奇数,输出结…...