用尾插的思想实现移除链表中的元素
目录
一、介绍尾插
1.链表为空
2.链表不为空
二、题目介绍
三、思路
四、代码
五、代码解析
1.
2.
3.
4.
5.
6.
六、注意点
1.
2.
一、介绍尾插
整体思路为
1.链表为空
void SLPushBack(SLTNode** pphead, SLTDataType x)
{SLTNode* newnode = BuyLTNode(x); //每次尾插都要建立新的节点 //BuyLTNode(x)该函数用于得到新节点if (*pphead == NULL) //没有节点,先赋值。 赋值不需要用到 tail !!!{*pphead = newnode;}}
需要注意的是:第一次尾插,只需要插入数据计科,并不需要建立tail指针、进行后移等操作
2.链表不为空
else //此时才会用到 tail !
{SLTNode* tail = *pphead;while (tail->next != NULL) //找尾{tail = tail->next;}tail->next = newnode;
}
此时需要:1.找尾 2.插入数据
二、题目介绍
203. 移除链表元素
已解答
简单
相关标签
相关企业
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1 输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7 输出:[]
三、思路
新建一个newhead指针和 tail 指针,将不是val的节点尾插到tail中。
四、代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* tail = NULL, *newhead = NULL; //*newhead 不是newheadstruct ListNode* cur = head;while(cur){if(cur->val != val){if(newhead == NULL) //没有节点的时候,只需要插进去即可,并不需要指针后移!{newhead = tail = cur; //tail从newcode开始}else //应该在此处将整个链表串接{tail->next = cur; //tail本质是指向cur的空间tail = tail->next;}cur = cur->next; //为了防止tail和cur指向同一块空间。cur先往后走tail->next = NULL; //tail的下一个节点置空。}else{struct ListNode* del = cur; //要删除的元素暂存在del中cur = cur->next;free(del); }}return newhead;}
五、代码解析
1.
struct ListNode* tail = NULL, *newhead = NULL; //*newhead 不是newhead
struct ListNode* cur = head;
新建指针,利用cur去遍历节点。
2.
if(newhead == NULL) //没有节点的时候,只需要插进去即可,并不需要指针后移!
{
newhead = tail = cur; //tail从newcode开始
}
类比尾插没有节点的时候
3.
else //应该在此处将整个链表串接
{
tail->next = cur; //本质是让tail指向cur的空间。tail只是一个指针!
tail = tail->next;
}
类比有节点的尾插
4.
cur = cur->next;
tail->next = NULL; //为了防止出现野指针问题(heap-use-after-free 释放后的堆使用)
在while循环的第一个条件中,应用该语句链接整个链表,作为循环的控制语句。
5.
else
{
struct ListNode* del = cur; //要删除的元素暂存在del中
cur = cur->next;
free(del);
}
当元素val等于的时候,需要借助一个del指针,删除需要删除的元素。
6.
return newhead; 返回新的节点
六、注意点
需要注意的是:
1.
cur = cur->next;
tail->next = NULL;
①作为循环的控制语句,可以写在 子if 之外
②应该先让cur后移,再让tail的next指针置空。 若先置空tail->next,那么此时tail与cur是指向同一节点,此时cur的next也将置空!
③若链表的尾val也需要删除,此时free(tail)之后,仍存在一个指向不明的野指针!
④若子if 子else句同时用到的语句,且不存在先后问题(先后问题指一般无删除)
此时可以将共同的语句封装在外部。
⑤尾插是让tail不断赶上cur,让cur始终领先于或平齐于tail!tail是新链表的尾部。
2.
尾插的思想常用在对链表节点的重新排序。
需要用到 tail newhead cur(遍历节点)三个指针
其思想是:将单个链表中符合要求的节点放到两个链表中分析,但需要在原来的链表中实现
相关文章:
用尾插的思想实现移除链表中的元素
目录 一、介绍尾插 1.链表为空 2.链表不为空 二、题目介绍 三、思路 四、代码 五、代码解析 1. 2. 3. 4. 5. 6. 六、注意点 1. 2. 一、介绍尾插 整体思路为 1.链表为空 void SLPushBack(SLTNode** pphead, SLTDataType x) {SLTNode* newnode BuyLTNode(x); …...
【Kubernetes】k8s删除master节点后重新加入集群
目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上,创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群,检查业务…...
HCIP—OSPF虚链路实验
OSPF虚链路—Vlink 作用:专门解决OSPF不规则区域所诞生的技术,是一种虚拟的,逻辑的链路。实现非骨干区域和骨干区域在逻辑上直接连接。注意虚链路条件:只能穿越一个区域,通常对虚链路进行认证功能的配置。虚链路认证也…...
RAxML-NG安装与使用-raxml-ng-v1.2.0(bioinfomatics tools-013)
01 背景 1.1 ML树 ML树,或最大似然树,是一种在进化生物学中用来推断物种之间进化关系的方法。最大似然(Maximum Likelihood, ML)是一种统计框架,用于估计模型参数,使得观察到的数据在该模型参数下的概率最…...
Tomcat内存马
Tomcat内存马 前言 描述Servlet3.0后允许动态注册组件 这一技术的实现有赖于官方对Servlet3.0的升级,Servlet在3.0版本之后能够支持动态注册组件。 而Tomcat直到7.x才支持Servlet3.0,因此通过动态添加恶意组件注入内存马的方式适合Tomcat7.x及以上。…...
pytorch之诗词生成3--utils
先上代码: import numpy as np import settingsdef generate_random_poetry(tokenizer, model, s):"""随机生成一首诗:param tokenizer: 分词器:param model: 用于生成古诗的模型:param s: 用于生成古诗的起始字符串,默认为空串:return: …...
OpenAI的ChatGPT企业版专注于安全性、可扩展性和定制化。
OpenAI的ChatGPT企业版:安全、可扩展性和定制化的重点 OpenAI的ChatGPT在商业世界引起了巨大反响,而最近推出的ChatGPT企业版更是证明了其在企业界的日益重要地位。企业版ChatGPT拥有企业级安全、无限GPT-4访问、更长的上下文窗口以及一系列定制选项等增…...
JS06-class对象
class对象 className 修改样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&quo…...
深度学习1650ti在win10安装pytorch复盘
深度学习1650ti在win10安装pytorch复盘 前言1. 安装anaconda2. 检查更新显卡驱动3. 根据pytorch选择CUDA版本4. 安装CUDA5. 安装cuDNN6. conda安装pytorch结语 前言 建议有条件的,可以在安装过程中,开启梯子。例如cuDNN安装时登录 or 注册,会…...
Node.js与webpack(三)
上一节:Node.js与Webpack笔记(二)-CSDN博客 从0来一遍(webpack项目) 将之前的webpack 的纯开发配置,重新创建空白项目,重新做一遍,捋一遍思路防止加入生产模式时候弄混 1.创建文件夹…...
测试覆盖率那些事
在测试过程中,会出现测试覆盖不全的情况,特别是工期紧张的情况下,测试的时间被项目的周期一压再压,测试覆盖概率不全就会伴随而来。 网上冲浪,了解一下覆盖率的文章,其中一篇感觉写的很不错,将…...
Etcd 介绍与使用(入门篇)
etcd 介绍 etcd 简介 etc (基于 Go 语言实现)在 Linux 系统中是配置文件目录名;etcd 就是配置服务; etcd 诞生于 CoreOS 公司,最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…...
Docker 安装 LogStash
关于LogStash Logstash,作为Elastic Stack家族中的核心成员之一,是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据,并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集…...
Selenium笔记
Selenium笔记 Selenium笔记 Selenium笔记element not interactable页面刷新 element not interactable "element not interactable"是Selenium在执行与网页元素交互操作(如点击、输入等)时抛出的一个常见错误。这个错误意味着虽然找到了对应的…...
ChatGPT :确定性AI源自于确定性数据
ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…...
linux驱动开发面试题
1.linux中内核空间及用户空间的区别? 记住“22”,两级分段两级权限。 例如是32位的机器,从内存空间看:顶层1G是内核的,底3G是应用的;从权限看:内核是0级特权,应用是3级特权。 2.用…...
【AI】Ubuntu系统深度学习框架的神经网络图绘制
一、Graphviz 在Ubuntu上安装Graphviz,可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端,输入以下命令更新软件包列表:sudo apt update。之后,使用命令sudo apt install graphviz来安装Graphviz软件包。为…...
AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.05-2024.03.10—(2)
论文目录~ 1.Debiasing Large Visual Language Models2.Harnessing Multi-Role Capabilities of Large Language Models for Open-Domain Question Answering3.Towards a Psychology of Machines: Large Language Models Predict Human Memory4.Can we obtain significant succ…...
AI解答——DNS、DHCP、SNMP、TFTP、IKE、RIP协议
使用豆包帮助我解答计算机网络通讯问题—— 1、DHCP 服务器是什么? DHCP 服务器可是网络世界中的“慷慨房东”哦🤣 它的全称是 Dynamic Host Configuration Protocol(动态主机配置协议)服务器。 DHCP 服务器的主要任务是为网络中的…...
【TypeScript系列】声明合并
声明合并 介绍 TypeScript中有些独特的概念可以在类型层面上描述JavaScript对象的模型。 这其中尤其独特的一个例子是“声明合并”的概念。 理解了这个概念,将有助于操作现有的JavaScript代码。 同时,也会有助于理解更多高级抽象的概念。 对本文件来讲,“声明合并”是指编…...
国之重器 openKylin 入驻 AtomGit:打造全球领先的智能操作系统开源根社区
操作系统是数字基础设施的核心基石,传统 Linux 操作系统用户和开发者经常面临系统软件更新不稳定、存量软件不兼容、开发适配成本高、显示渲染效率低等问题。在 AI 浪潮席卷全球的当下,将 AI 能力与操作系统已成紧密结合,打造智能交互新范式已…...
抖音下载器技术解析:突破平台限制的高效内容获取方案
抖音下载器技术解析:突破平台限制的高效内容获取方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...
Qwen-Image-Edit-F2P在Vue前端项目中的可视化应用
Qwen-Image-Edit-F2P在Vue前端项目中的可视化应用 1. 引言 想象一下这样的场景:用户上传一张简单的人脸照片,几秒钟后就能看到自己穿着优雅礼服站在巴黎街头,或是化身古风侠客执剑而立。这种曾经只存在于科幻电影中的体验,现在通…...
BT33F双基二极管的基本特性
简 介: 本文测试了BT33F双基二极管的特性,发现其发射极对两个基极呈现不同导通电压(0.86V和1.6V),B1、B2间电阻约13KΩ。实验表明,只有当B1接地、B2接5V电源时,电路才能产生46Hz的振荡信号&…...
Captain AI vs DeepSeek:Ozon 卖家专属 AI,垂直深耕更懂俄语区
做Ozon跨境,选 AI 工具别只看 “全能”,更要看 “专业”和“精通”。DeepSeek 是通用型跨境AI,覆盖多平台、多场景;而Captain AI是Ozon垂直定制 AI,聚焦俄语区与Ozon规则,四大核心功能精准解决卖家从新品到…...
Windows 10平台Android子系统技术实现与跨平台应用实践
Windows 10平台Android子系统技术实现与跨平台应用实践 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 Windows Subsystem for Android࿰…...
别再手动点灯了!用Simulink串口实时控制STM32,5分钟搞定双向通信
基于Simulink与STM32的实时双向通信实战指南 在嵌入式系统开发中,快速原型验证是提升效率的关键环节。传统开发模式下,工程师需要花费大量时间编写底层通信协议、调试硬件接口,而真正核心的控制算法验证反而被边缘化。本文将介绍一种高效开发…...
如何用快马平台为网站开发公司快速生成企业官网原型,提升方案演示效率
作为一名经常需要快速响应客户需求的网站开发者,我最近发现了一个能大幅提升工作效率的好方法 - 使用InsCode(快马)平台来生成企业官网原型。这个方法特别适合像我们华网三百每年.cn这样需要快速为客户提供方案演示的网站开发公司。 需求分析阶段 当接到一个新客户…...
实战避坑:用Playwright+Selenium绕过电商网站验证码的3种方法(附Python代码)
实战避坑:用PlaywrightSelenium绕过电商网站验证码的3种方法(附Python代码) 电商平台的反爬虫机制日益复杂,验证码作为核心防线之一,已经从简单的图文识别升级到行为验证、智能风控等多维度拦截。本文将聚焦淘宝、京东…...
Realistic Vision V5.1效果展示:这些惊艳的人像作品都是AI生成的
Realistic Vision V5.1效果展示:这些惊艳的人像作品都是AI生成的 1. 当AI画师遇上专业摄影师 你有没有见过这样的AI生成人像?皮肤纹理清晰到能看见毛细血管,发丝在阳光下呈现自然的半透明质感,眼神光的位置精准符合物理反射规律…...
