【数据结构与算法】单链表综合练习: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

如何用Spotube打造跨平台音乐流媒体体验:开源方案全解析

如何用Spotube打造跨平台音乐流媒体体验:开源方案全解析 【免费下载链接】spotubespotube - 一个开源、跨平台的 Spotify 客户端,使用 Spotify 的数据 API 和 YouTube 作为音频源,适合希望在不同平台上使用 Spotify 服务的开发者。 项目地址: https://gitcode.com/GitHub_Trending/sp/spotube Spotube是一款开源的跨平台音乐流媒体客户端,它创新性地结合了Spotify数据API与YouTube音频源,为用户提供无需订阅即可享受高品质音乐的解决方案。这款基于Flutter开发的应用以插件化架构为核心,支持Windows、macOS、Linux、Android和iOS全平台,在保障隐私安全的同时,实现了轻量化设计与强大功能的完美平衡。无论是音乐爱好者还是开发者,都能在Spotube中找到适合自己的使用场景和扩展可能性。 项目概述:重新定义音乐流媒体体验 在当今数字音乐时代,用户对跨平台访问、内容多样性和隐私保护的需求日益增长。Spotube正是为满足这些需求而设计的开源解决方案,它

By Ne0inhk
GitHub 热榜项目 - 日榜(2025-11-16)

GitHub 热榜项目 - 日榜(2025-11-16)

GitHub 热榜项目 - 日榜(2025-11-16) 生成于:2025-11-16 统计摘要 共发现热门项目: 18 个 榜单类型:日榜 本期热点趋势总结 本期GitHub热榜显示AI应用开发依然是绝对焦点,开发者正致力于将前沿AI技术转化为开箱即用的解决方案。舆情监控工具TrendRadar和谷歌的AI工具包adk-go引领了这股潮流,它们强调用AI解决信息过载和复杂流程自动化等实际问题。同时,轻量化RAG框架LightRAG和大模型记忆引擎Memori的流行,反映出社区对提升AI应用性能与效率的迫切需求。微软的AI呼叫中心项目则展示了AI在具体业务场景的深度集成。总体而言,榜单揭示了AI技术正从模型研发转向大规模生产部署,核心趋势是追求更高的工程实用性与易用性。 1. sansan0/TrendRadar * 🏷️ 项目名称:sansan0/TrendRadar * 🔗 项目地址: https://github.com/sansan0/TrendRadar * ⭐ 当前 Star 数: 13992 * 📈 趋势 Star 数: 230 *

By Ne0inhk
【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码

【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码

【免费开源】基于STM32的智能宠物喂食系统设计与实现(全流程技术详解)附源码 一、项目背景与意义 随着生活节奏的加快,越来越多的年轻人选择饲养宠物作为精神陪伴。然而,长时间工作或外出,往往导致无法按时喂食,从而影响宠物健康。 传统的手动喂食方式存在以下痛点: 1. 时间不固定:主人无法保证每天同一时间投喂。 2. 食量不稳定:每次投喂量可能不一致,容易造成肥胖或营养不足。 3. 缺乏互动提醒:宠物进食状态无法实时获知。 为此,我们设计了一个 基于STM32的智能宠物喂食系统,集成定时喂食、远程控制、剩余粮检测、语音提示等功能,实现宠物喂食的智能化与自动化。 本项目不仅适合家庭应用,也可作为嵌入式开发课程设计、物联网实验项目的实践案例。 源码下载 完整项目已打包,开源免费:https://code.devzoo.top/embedded/71.html 二、系统设计方案 1. 系统功能目标 * 定时喂食:支持多时段自动出粮

By Ne0inhk
Trae + Git本地仓库管理(离线)小白一站式指南

Trae + Git本地仓库管理(离线)小白一站式指南

环境 Windows环境,安装trae,git bash。 ps:trae的生态和vscode基本一致,在vscode中也可以仿照操作。 1全局初始化 ctrl+R输入cmd呼出控制台,运行 git --version 显示版本,说明系统环境变量正常,可以往下操作,若报错,重装git bash。 进入Trae,新建终端 配置git用户名和邮箱(离线状态邮箱随便写。若是想要在线状态把代码上传github,需要跟你的github账号保持一致)。在终端窗口中依次键入以下命令: git config --global user.name "<输入你的用户名>" git config --global user.email "<输入你的邮箱>" 2建立本地仓库 2.1

By Ne0inhk