C语言题目练习2
前面我们知道了单链表的结构及其一些数据操作,今天我们来看看有关于单链表的题目~
移除链表元素
这个题目要求我们删除链表中是指定数据的结点,最终返回新的头结点,结合例子来看看。
思路1
遍历链表找到值为val的结点,执行删除指定位置的操作,返回头结点
简单回顾单链表的删除pos结点操作我们可以进行更快的操作。


我们可以看到题目代码中已经给出了单链表的结构,只需要我们在函数中实现相应的操作就可以了。为了使用方便,我们可以将结构体使用typedef重命名一下:

typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val)
{ListNode* pcur = head;//遍历链表while(pcur){//看是不是指定数据的结点//是就执行删除指定结点的操作if (pcur->val == val){ListNode* pos = pcur;pcur = pcur->next;//易错点!!!//pcur直接往后面走,避免被释放if (pos == head)//头删{ListNode* next = pos->next;free(head);head = next;//原来头结点的下一个结点成为新的头结点}else{//遍历链表找指定结点的上一个结点ListNode* prev = head;while (prev->next != pos){prev = prev->next;}//删除pos结点//改变上一个结点指向prev->next = pos->next;free(pos);pos = NULL;//释放及时置为空,避免野指针}}else{pcur = pcur->next;}//不是往后面继续遍历}//返回头结点//在原来的链表操作,头结点没有变化return head;
}

提交成功
这里有一个易错点就是当遍历到是指定数据的结点时,pcur要直接往后面走,用pos保存当前结点,这样能避免后面释放掉pcur,就不能正常使用了。
我们可以看到思路1有两层while循环,外层循环进行遍历找结点,内层循环删除指定的结点,那么时间复杂度也就是O(N^2),显然这不是最好的方案,我们有没有什么更好的方法呢?接下来,就是我们的思路二。
思路2
创建一个新的链表,遍历原来的链表,将链表中值不为val的结点尾插到新链表中,这个新链表呢,最开始创建两个新结点——NewHead、NewTail并且把它们置为空指针。
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val)
{ListNode* NewHead = NULL;//新的头结点ListNode* NewTail = NULL;//新的尾结点//遍历原来的链表ListNode* pcur = head;while (pcur)//结点不为空{//将结点数据不等于val的放入新链表if (pcur->val != val){//尾插//1.如果链表为空//新的头结点和尾结点就是当前的结点if (NewHead == NULL){NewHead = NewTail = pcur;}//2.链表不为空else {//新链表原来尾结点的下一个结点就是当前的结点NewTail->next = pcur;//当前结点成为新的尾结点NewTail = pcur;}}//继续往后面遍历pcur = pcur->next;}//易错点!!!//如果尾结点不为空,要把尾结点置为空if (NewTail){NewTail->next = NULL;}//返回新的头结点return NewHead;
}

提交成功
这里有一个易错点就是要把尾结点的下一个结点置为空,如果不把尾结点的下一个结点置为空,尾结点本身的内容(保存的数据和下一个结点的指针)并没有发生改变,链表依然会带上尾结点后面的数据,比如示例1中1,2,6,3,4,5,6.当新的尾结点是5的时候,后面会带一个结点,而我们希望的是尾结点后面就没有结点了,所以我们要把尾结点的下一个结点置为空。当然,在置为空以前,首先要判断尾结点是否为空,避免对空指针进行解引用。

今日练习结束,期待与各位未来的优秀程序员交流,有什么请私信~~~
相关文章:
C语言题目练习2
前面我们知道了单链表的结构及其一些数据操作,今天我们来看看有关于单链表的题目~ 移除链表元素 移除链表元素: https://leetcode.cn/problems/remove-linked-list-elements/description/ 这个题目要求我们删除链表中是指定数据的结点,最终返…...
复变函数与积分变换——留数定理求拉氏逆变换
1.留数定理 若s1,s2,…,sn是F(s)的所有奇点(函数在某个点上的取值无定义或者无限大),且当s→∞时,F(s)→0,则有: 一般地: s1是一级极点,则&#…...
RabbitMQ事务模块
目录 消息分发 负载均衡 幂等性保障 顺序性保障 顺序性保障方案 二号策略:分区消费 三号策略:消息确认机制 四号策略: 消息积压 RabbitMQ集群 选举过程 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,要么全部成功,要么全…...
Android终端GB28181音视频实时回传设计探讨
技术背景 好多开发者,在调研Android平台GB28181实时回传的时候,对这块整体的流程,没有个整体的了解,本文以大牛直播SDK的SmartGBD设计开发为例,聊下如何在Android终端实现GB28181音视频数据实时回传。 技术实现 Andr…...
AI金融攻防赛:金融场景凭证篡改检测(DataWhale组队学习)
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。本文主要讲解如何解决 金融场景凭证篡改检测的核心问题,以及解决思路和代码实现过程。希望…...
华为OD机试真题---喊7的次数重排
题目描述 喊7是一个传统的聚会游戏。N个人围成一圈,按顺时针从1到N编号。编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1。但是,当将要喊出来的数字是7的倍数或者数字本身含有7时,不能把这个数字直接喊出来&#x…...
使用阿里巴巴的图
参考链接1 引用彩色图标可参考以下链接 (到第三步 测试图标效果 的时候 还是可以保持之前的写法:<i/sapn class“iconfont icon-xxx”>也会出现彩色的) 参考链接2 阿里巴巴字体使用 也可以直接将官网的代码复制过来到页面的css区域...
【hot100-java】排序链表
链表题。 使用归并排序法。 一图解决。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; thi…...
腾讯云视立方TRTCCalling Web 相关
基础问题 什么是 TRTCCalling? TRTCCalling 是在 TRTC 和 TIM 的基础上诞生的一款快速集成的音视频的解决方案。支持1v1和多人视频/语音通话。 TRTCCalling 是否支持接受 roomID 为字符串? roomID 可以 string,但只限于数字字符串。 环境问题 Web …...
使用argparse库实现命令行参数解析的实用指南
使用argparse库实现命令行参数解析的实用指南 在现代软件开发中,命令行工具的使用越来越普遍。无论是自动化脚本、数据处理工具,还是系统管理工具,命令行参数解析都是一个不可或缺的功能。Python的argparse库提供了一种简单而强大的方式来处理命令行参数,使得开发者能够轻…...
kafka消息队列核心内容及常见问题
目录 1. 使用消息队列的目的(优点与缺点) 2. 常见各消息队列对比 3. kafka介绍 3.1 kafka简介 3.2 kafka特点 3.3 kafka系统架构 3.4 设置数据可靠性 3.4.1 Topic 分区副本 3.4.2 消息确认机制 4. 常见问题(面试题) 4.…...
电脑无线网wifi和有线网同时使用(内网+外网同时使用)
一、要求 我这里以无线网wifi为外网,有线网卡为内网为例: 一、基本信息 无线wifi(外网):ip是192.168.179.235,网关是192.168.179.95有线网(内网):ip是192.168.10.25&…...
Ubuntu22.04阿里云服务器 Gitlab搭建CICD
gitlab搭建cicd流水线教程 1、阿里云申请免费云盘 申请免费云盘用于创建gitlab 申请方法百度 2、安装gitlab-ce 更新系统: sudo apt update sudo apt upgrade -y 安装必要的依赖: sudo apt install -y curl openssh-server ca-certificates pos…...
2024最新全流程ChatGPT深度科研应用、论文与项目撰写、数据分析、机器学习、深度学习及AI绘图
2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。 2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其…...
网络流C++
网络流问题及其应用 网络流问题是图论中的一个经典问题,应用于交通调度、物流配送、计算机网络等领域。它通过模型化图中的流量传递过程,解决从源点传递流量到汇点的最优流量分配问题。本文将介绍网络流的基本概念、几种经典算法,并通过一个…...
RTC -
RTC 目录 RTC 回顾 RTC 如何实现RTC制作一个时钟日历 代码编写 rtc.c完整代码 模块开发的步骤: 1、找文档 2、 在文档里面找通信方式,通信过程(协议) 3、代码> -- 前面学的是模块的开发,串口类,I…...
图像处理中常用的统计矩
目录 原点矩中心矩常用的统计矩偏度(Skewness)定义解释 峰度(Kurtosis)定义解释 统计矩的应用MATLAB相关函数 原点矩(Moment about the Origin)和中心矩(Central Moment)是概率论和数…...
Ubuntu 详解| Ubuntu ssh| Ubuntu apt命令大全| Ubuntu性能优化| Ubuntu换镜像源
Ubuntu 是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 和它一样的还有 kali(一款渗透测试软件) Debian-kali 小白参考 :Centos 7.9 安装 图解版 小白必看 最新_centos7.9-CSDN博客文章浏览阅读2.5k次,点赞…...
Linux安全命令(Linux Security Commands)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
2024最新版安装教程!Python安装+PyCharm安装使用教程!!(非常简单)
Python下载安装 一、进入Python官网首页,下载最新版的Python 官方网址:Download Python | Python.org 鼠标悬浮在Downloads,选择最新版本 注意:由于Python官网服务器设立在国外,所以下载速度非常慢,我这…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

