【数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点

【数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人等方向学习者
❄️个人专栏:《C语言》《【初阶】数据结构与算法》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

链表是 C 语言和数据结构学习的核心考点,也是编程入门绕不开的经典题型。本文聚焦删除指定值节点、反转链表、查找中间节点三大高频链表题,从算法原理到代码实现逐拆解,用通俗易懂的逻辑和清晰的代码示例,帮你吃透链表操作的核心思路。掌握这些基础题型,不仅能夯实指针功底,更能为后续复杂数据结构学习筑牢根基。

一、删除链表中等于给定值 val 的所有节点

1.1题目

链接:删除链表中等于给定值 val 的所有节点

在这里插入图片描述

1.2 算法原理

创建一个新链表,遍历原链表,把不等于val值尾插到新链表中最后返回新链表

1.3代码

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef structListNode ListNode;structListNode*removeElements(structListNode* head,int val){ ListNode* newhead = NULL; ListNode* newtail = NULL; ListNode* pcur = head;while(pcur){if(pcur->val != val){if(newhead == NULL)//链表为空 newhead = newtail = pcur;else{ newtail->next = pcur; newtail = pcur;}} pcur = pcur->next;}if(newtail) newtail->next = NULL;return newhead;}

二、反转链表

2.1题目

链接:反转链表

在这里插入图片描述

2.2 算法原理

在这里插入图片描述


注1:n3会最先指向NULL所以要特判;
注2:链表可能为空,为空直接返回;

2.3代码

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef structListNode ListNode;structListNode*reverseList(structListNode* head){//链表 为空if(head == NULL)return head; ListNode* n1 = NULL; ListNode* n2 = head; ListNode* n3 = head->next;while(n2){ n2->next = n1; n1 = n2; n2 = n3;if(n3) n3 = n3->next;}return n1;}

三、链表中间节点

3.1题目

链接:链表中间节点

在这里插入图片描述

3.2 算法原理

核心思想:快慢指针(2*slow == fast)

在这里插入图片描述


注意:不能fast->next && fast当遇到偶数链表会造成对空指针解应用

3.3代码

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef structListNode ListNode;structListNode*middleNode(structListNode* head){ ListNode* slow = head; ListNode* fast = head;while(fast && fast->next){ slow = slow->next; fast = fast->next->next;}return slow;}

总结与每日励志

✨本文解析链表三大高频题型:删除指定值节点、反转链表、查找中间节点。通过新链表尾插法实现删除操作;利用三指针法逐步反转链表;采用快慢指针高效定位中间节点。代码示例清晰,附详细算法原理图解,帮助掌握链表核心操作逻辑。这些基础题型是提升指针运用能力和数据结构理解的关键,建议结合图示反复练习。

在这里插入图片描述

Read more

给数据“立规矩” —— MySQL 新手必学的表约束全指南

给数据“立规矩” —— MySQL 新手必学的表约束全指南

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.为什么要有表的约束? 二.表的约束 2.1空属性 2.2默认值 2.3列描述 2.4zerofill 2.5主键 2.5.1复合主键 2.6自增长 2.7唯一键 5.8外键 前言: 在上一篇文章中我们讲解了MySQL中的各种数据类型,那么正是因为有了各种数据类型,才会有今天我们要讲的表的约束相关知识,那么这中间到底是怎么回事呢?下面我们就一起来看看吧。 一.为什么要有表的约束? 在上一篇文章中,我们认识了很多的数据类型,并在它们的下面我们也通过例子进行了演示,

By Ne0inhk
RUST:异步代码的测试与调试艺术

RUST:异步代码的测试与调试艺术

RUST:异步代码的测试与调试艺术 一、异步测试的本质与难点 1.1 异步测试与同步测试的区别 💡在Rust同步编程中,测试通常是顺序执行的,每个测试函数会阻塞线程直到完成,结果是确定的。而异步测试的结果可能受到任务调度、网络延迟、数据库连接等因素的影响,时序性和状态管理更加复杂。 同步测试示例: #[cfg(test)]modtests{#[test]fntest_add(){assert_eq!(1+1,2);}} 异步测试示例(使用Tokio测试宏): #[cfg(test)]modtests{usetokio::time::sleep;usestd::time::Duration;#[tokio::test]asyncfntest_async_add(){sleep(Duration::from_millis(100)).await;assert_

By Ne0inhk
Spark+Flask新能源车数据分析与推荐系统实战:从0到1搭建完整项目

Spark+Flask新能源车数据分析与推荐系统实战:从0到1搭建完整项目

Spark+Flask新能源车数据分析与推荐系统实战:从0到1搭建完整项目 在碳中和政策驱动与新能源汽车产业爆发的双重背景下,车联网数据、用户行为数据、市场交易数据的价值愈发凸显。本文将带大家从零开始,基于Spark完成新能源车数据的分布式分析,再通过Flask搭建轻量级Web服务,结合协同过滤算法实现个性化车辆推荐,最终打造一套完整的新能源车数据分析与推荐系统。全程聚焦实战,所有代码均可直接复用,是大数据工程师、数据分析师的优质实战项目。 * Spark+Flask新能源车数据分析与推荐系统实战:从0到1搭建完整项目 * 一、项目整体架构与技术栈解析 * 1. 核心技术栈 * 2. 项目流程 * 二、实战步骤:从数据处理到推荐系统搭建 * 1. 环境准备 * 2. Spark数据处理实战 * (1)数据集说明 * (2)Spark数据清洗与分析 * (3)运行Spark脚本 * 3. 基于Spark MLlib实现协同过滤推荐 * 4. Flask搭建Web

By Ne0inhk
微服务架构下Spring Session与Redis分布式会话实战全解析

微服务架构下Spring Session与Redis分布式会话实战全解析

目录 🚀摘要 📖 为什么需要分布式会话管理? 🎯 传统会话管理的痛点 🔄 分布式会话的演进历程 🏗️ Spring Session架构深度解析 🎨 设计理念:透明化抽象层 🔧 核心组件解析 1. SessionRepositoryFilter - 入口拦截器 2. RedisSessionRepository - Redis实现 📊 性能特性分析 🔧 实战:从零构建企业级分布式会话系统 🛠️ 环境准备与项目搭建 Maven依赖配置 Redis集群配置 🎯 Spring Session高级配置 自定义序列化策略 会话事件监听器 💻 完整代码示例:电商购物车会话管理 📈 性能优化实战 1. Redis数据结构优化 2. 会话数据分片策略 🏢 企业级高级应用 📊 大型电商平台案例:双11大促会话管理 分级存储策略 会话迁移服务 ⚡ 性能优化技巧 1. 读写分离优化 2. 本地缓存优化 🔍 故障排查指南 1. 常见问题与解决方案 2. 监控指标配置

By Ne0inhk