【数据结构与算法 刷题系列】移除链表元素

 

                                                 

                                               💓 博客主页:倔强的石头的CSDN主页 

                                               📝Gitee主页:倔强的石头的gitee主页

                                        ⏩ 文章专栏:数据结构与算法刷题系列(C语言)

                                                                期待您的关注

目录

一、问题描述

二、解题思路

三、源代码实现


一、问题描述

二、解题思路

第一种方式 :删除原链表的指定元素
第二种方式创建新链表 尾插不属于指定元素的节点

 这里只介绍第二种方式,因为更为简洁高效

  1.  首先创建新链表的首节点和尾节点指针 以及遍历原链表的pcur指针
  2. while循环,当pcur不为空时
          判断该元素是否不等于要删除的元素
                如果不是,进一步判断
                     若为空链表,首尾指针都指向新节点
                     若为非空链表,尾指针next指向该节点,尾指针向后移动

         pcur向后移动
  3. 出循环时,表明链表遍历完成 或未进入循环(原链表为空的情况)
            如果尾指针不为空的话,将尾指针的next指向空(这种情况对应的是原链表尾节点是需          要删除元素的情况,这种情况需要手动置空)
    对尾指针判空是防止对空链表的尾指针解引用
  4. 最后返回新链表首节点

三、源代码实现

struct ListNode {int val;struct ListNode* next;
};
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* newhead, * newtail;//创建新链表的头指针尾指针newhead = newtail = NULL;//初始化struct ListNode* pcur = head;//遍历原链表的指针while (pcur){if (pcur->val != val)//先判断是否是要删除的要素{if (newhead == NULL)//如果不是要删除的元素,并且新链表为空{newhead = newtail = pcur;//新链表首尾指针都指向该节点}else{newtail->next = pcur;//将该节点插入到新链表newtail = newtail->next;}}pcur = pcur->next;//pcur向后移动}if (newtail)//先判空是为了保证不是空链表{newtail->next = NULL;//将尾节点next指针指向NULL}return newhead;
}

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

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

相关文章

phpstudy配置网站伪静态

apache的伪静态写法: RewriteEngine On RewriteCond % {REQUEST_FILENAME} !-f RewriteCond % (REQUEST_FILENAME) !-d RewriteRule ^(.*)$ indexp?/$1 [QSA, PT,L] nginx写法: location / { index index.html index.php; #autoindex on; if(!…

V2P(车与人)简介

V2P(车与人)简介 一、定义与概述 V2P(Vehicle-to-Pedestrian)是车联网(V2X)技术的一个重要组成部分,指的是车辆与行人之间的通信技术。它基于专用短波通讯DSRC或LTE-V等方式,实现车…

【MySQL精通之路】InnoDB静态数据加密(13)

目录 1.关于静止数据加密 2.加密先决条件 3.为库和通用表空间定义加密默认值 4.FPT表空间加密 5.通用表空间加密 6.Doublewrite文件加密 7.mysql系统表空间加密 8.redolog日志加密 9.undolog日志加密 10.主密钥轮转 11.加密和恢复 12.导出加密的表空间 13.加密和复…

一个程序员的牢狱生涯(35)惊疑

星期一 惊 疑 ‘四道门’被关上,我和老杨在厨房的小窗口处把四哥递出来的饭菜安顿在小推车上。等号子里的小吕也过来后,一起推着小推车挨个给每个号子打饭。女号子那个长头发忧郁的女犯人仍旧没有出来。 打完饭后,我和老杨回到了号子里,众人大都在喝着打回来的小米稀饭。老…

vs报错:E1696 C++ 无法打开 源 文件

项目–> 项目属性–>C/C -->常规 -->使用Windows运行时扩展 -->选"是" vs 2019 报错:C 无法打开 源 文件 - 知乎 (zhihu.com)

基于trunk、yew构建web开发脚手架

trunk 构建、打包 rust wasm 程序;yewweb 前端开发库; 项目仓库yew-web trunk 之前已经简单介绍了trunk,全局安装: $> cargo install --locked trunk常用命令: trunk build 基于wasm-bindgen构建 wasm 程序。trunk watch …

stm32学习-串口发送和接口

串口接收的方法 查询 流程: 1.在主函数里不断判断RXNE标志位;如果置1了,就说明接收到数据了; 2.调用ReceiveData读取DR寄存器 #include "stm32f10x.h" // Device header #include "Delay.h&…

vue17:v-bind对css样式的控制增强

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

『USB3.0Cypress』FPGA开发(3)GPIF II短包零包时序分析

文章目录 1.时序参数2.FX3_PCLK3.短包和零包3.1短包时序3.2零包ZLP时序 4.传送门 1.时序参数 AN65974文档中明确了操作GPIF II接口时的时序参数&#xff0c;上一篇文章中给出了读写时序图&#xff0c;本篇第二节给出ZLP写周期时序&#xff0c;这里说明相关的时序参数。应该注意…

initial begin end 和always语句区别

initial语句&#xff1a;只执行一次always语句&#xff1a;不断重复执行&#xff0c;直到仿真结束&#xff0c; initial begin 语句1; ... 语句n; end always (posedge clk or negedge clear) begin if(!clear) qout 0; //异步清零 else qout 1; end…

用户态下屏蔽全局消息钩子 —— ClientLoadLibrary 指针覆盖

目录 前言 一、研究 SetWindowsHookEx 的机制 二、概念验证 三、运行效果分析 四、总结与展望 参考文献 原文出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/139206017] 前言 SetWindowsHookEx 函数帮助其他人员注入模块到我们的进程&#x…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题&#xff1a;感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

C++中的模板类的定义与使用

文章目录 前言模板类的定义与使用方式模板类的总结 前言 在C中&#xff0c;模板类是一种通用的类模板&#xff0c;允许在类定义和成员函数实现时使用不具体指定的数据类型或参数。下面是模板类的定义与使用方式&#xff0c;并对其进行总结&#xff1a; 模板类的定义与使用方式…

Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐 BGP模式部署

1 metallb 安装参考:Kubernetes(k8s) v1.30.1 本地集群部署 默认不支持LoadBalancer metallb来解决-CSDN博客 2 删除 Layer 2 模式 配置 kubectl delete -f IPAddressPool.yaml kubectl delete -f L2Advertisement.yaml kubectl delete -f discuz-srv.yaml 3 配置 k8s Metal…

nacos-opera(k8s)安装问题解决

整理一些关于k8s部署nacos出现的一些恶心的问题 网上说其他说的更改数据库连接都未解决。 在用nacos-opera想安装高可用nacos时连接mysql数据库报错: 报错具体项: No DataSource set 具体就是说没找到数据源。 第一个 检查一下nacos连接数据库配置 : 第二个 检查一下数据库…

[笔试训练](三十三)097:跳台台阶扩展问题098:包含不超过两种字符的最长子串099:字符串的排列

目录 097:跳台台阶扩展问题 098:包含不超过两种字符的最长子串 099:字符串的排列 097:跳台台阶扩展问题 题目链接:跳台阶扩展问题_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 规律题: 1.跳上n级台阶的跳法等于前面1~(n-1)级台阶跳法的总和1。 2.跳…

开发中遇到Electron自定义窗口的问题

开发中遇到Electron自定义窗口的问题 使用VUE3 Electron 开发一个音乐软件&#xff0c;自定义导航栏的放大、缩小和关闭。 其中使用ipcRenderer进行联系Electron&#xff0c;进行放大、缩小和关闭操作。 遇到问题 遇到__dirname is not defined in ES module scope //在V…

一、机器学习概述

1.课程目的 学习机器学习算法、提高算法性能的技巧 2.算法分类 有监督学习supervised learning、无监督学习unsupervised learning (1).有监督学习 在这种学习方式中&#xff0c;算法需要一个带有标签的训练数据集&#xff0c;这些标签通常是每个样本的真实输出或类别。 在有…

[C][指针]详细讲解

目录 0.铺垫1.指针是什么&#xff1f;2.指针变量3.指针和指针类型4.指针类型的意义5.野指针1.野指针成因2.如何规避野指针6.指针运算 6.指针和数组7.二级指针(n级指针&#xff09;8.指针数组9.数组指针10.&数组名VS数组名11.函数指针 12.函数指针数组13.回调函数 0.铺垫 在…

NDIS小端口驱动(九)

PCIe设备难免会遇到一些重置设备的请求&#xff0c;例如重置总线的时候&#xff0c;但是由于NIC网卡的多样性&#xff0c;重置设备确实也有许多要注意的地方&#xff0c;另外还有一些包含WDM的NDIS驱动 微型端口驱动程序硬件重置 微型端口驱动程序必须向 NdisMRegisterMinipo…