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

用尾插的思想实现移除链表中的元素

目录

一、介绍尾插

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结语 前言 建议有条件的&#xff0c;可以在安装过程中&#xff0c;开启梯子。例如cuDNN安装时登录 or 注册&#xff0c;会…...

Node.js与webpack(三)

上一节&#xff1a;Node.js与Webpack笔记&#xff08;二&#xff09;-CSDN博客 从0来一遍&#xff08;webpack项目&#xff09; 将之前的webpack 的纯开发配置&#xff0c;重新创建空白项目&#xff0c;重新做一遍&#xff0c;捋一遍思路防止加入生产模式时候弄混 1.创建文件夹…...

测试覆盖率那些事

在测试过程中&#xff0c;会出现测试覆盖不全的情况&#xff0c;特别是工期紧张的情况下&#xff0c;测试的时间被项目的周期一压再压&#xff0c;测试覆盖概率不全就会伴随而来。 网上冲浪&#xff0c;了解一下覆盖率的文章&#xff0c;其中一篇感觉写的很不错&#xff0c;将…...

Etcd 介绍与使用(入门篇)

etcd 介绍 etcd 简介 etc &#xff08;基于 Go 语言实现&#xff09;在 Linux 系统中是配置文件目录名&#xff1b;etcd 就是配置服务&#xff1b; etcd 诞生于 CoreOS 公司&#xff0c;最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…...

Docker 安装 LogStash

关于LogStash Logstash&#xff0c;作为Elastic Stack家族中的核心成员之一&#xff0c;是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据&#xff0c;并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集…...

Selenium笔记

Selenium笔记 Selenium笔记 Selenium笔记element not interactable页面刷新 element not interactable "element not interactable"是Selenium在执行与网页元素交互操作&#xff08;如点击、输入等&#xff09;时抛出的一个常见错误。这个错误意味着虽然找到了对应的…...

ChatGPT :确定性AI源自于确定性数据

ChatGPT 幻觉 大模型实际应用落地过程中&#xff0c;会遇到幻觉&#xff08;Hallucination&#xff09;问题。对于语言模型而言&#xff0c;当生成的文本语法正确流畅&#xff0c;但不遵循原文&#xff08;Faithfulness&#xff09;&#xff0c;或不符合事实&#xff08;Factua…...

linux驱动开发面试题

1.linux中内核空间及用户空间的区别&#xff1f; 记住“22”&#xff0c;两级分段两级权限。 例如是32位的机器&#xff0c;从内存空间看&#xff1a;顶层1G是内核的&#xff0c;底3G是应用的&#xff1b;从权限看&#xff1a;内核是0级特权&#xff0c;应用是3级特权。 2.用…...

【AI】Ubuntu系统深度学习框架的神经网络图绘制

一、Graphviz 在Ubuntu上安装Graphviz&#xff0c;可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端&#xff0c;输入以下命令更新软件包列表&#xff1a;sudo apt update。之后&#xff0c;使用命令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 服务器是什么&#xff1f; DHCP 服务器可是网络世界中的“慷慨房东”哦&#x1f923; 它的全称是 Dynamic Host Configuration Protocol&#xff08;动态主机配置协议&#xff09;服务器。 DHCP 服务器的主要任务是为网络中的…...

【TypeScript系列】声明合并

声明合并 介绍 TypeScript中有些独特的概念可以在类型层面上描述JavaScript对象的模型。 这其中尤其独特的一个例子是“声明合并”的概念。 理解了这个概念,将有助于操作现有的JavaScript代码。 同时,也会有助于理解更多高级抽象的概念。 对本文件来讲,“声明合并”是指编…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...