news 2026/7/11 8:36:05

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人等方向学习者
❄️个人专栏:《C语言》《【初阶】数据结构与算法》
永远相信美好的事情即将发生

文章目录

  • 前言
  • 一、删除链表中等于给定值 val 的所有节点
    • 1.1题目
    • 1.2 算法原理
    • 1.3代码
  • 二、反转链表
    • 2.1题目
    • 2.2 算法原理
    • 2.3代码
  • 三、链表中间节点
    • 3.1题目
    • 3.2 算法原理
    • 3.3代码
  • 总结与每日励志

前言

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

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

1.1题目

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

1.2 算法原理

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

1.3代码

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedefstructListNodeListNode;structListNode*removeElements(structListNode*head,intval){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;returnnewhead;}

二、反转链表

2.1题目

链接:反转链表

2.2 算法原理


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

2.3代码

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

三、链表中间节点

3.1题目

链接:链表中间节点

3.2 算法原理

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


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

3.3代码

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

总结与每日励志

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 19:01:38

华为OD技术面真题 - 数据库MySQL - 2

文章目录 介绍一下MySQL查询语句执行过程简述一下MySQL的架构说一下你理解的数据库索引?分别说说索引的优点和缺点说说MySQL中索引类型?如何创建合适的索引?怎么优化查询速度 介绍一下MySQL查询语句执行过程 执行SQL查询语句会经过上述组件和…

作者头像 李华
网站建设 2026/7/10 13:10:26

自定义类型转换机制

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第…

作者头像 李华
网站建设 2026/7/6 2:46:32

Transformer 大模型架构深度解析(4)详解 Transformer 架构

目录 文章目录目录Transformer 架构Input EmbeddingPositional EncodingEncoder软对齐注意力的思想词向量相似度的计算方法Scaled Dot-Product AttentionSelf-AttentionMulti-Head Attention(Self-Attention)Feed Forward Neural NetworkResidual Connec…

作者头像 李华
网站建设 2026/7/9 4:50:33

‌别再手动对比日志了!AI日志分析工具实测TOP3

软件测试中的日志分析痛点‌ 在软件测试工作中,日志分析是核心环节,涉及错误追踪、性能监控和测试报告生成。传统手动方法耗时耗力:测试工程师需逐行比对日志文件,识别异常模式,平均每个项目消耗20-30小时。常见问题包…

作者头像 李华
网站建设 2026/7/1 21:37:56

基于Vue的数字图书馆设计与开发793m5(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末

系统程序文件列表 系统功能 用户,图书类别,图书信息 开题报告内容 一、 课题背景、研究目的与意义 1. 课题背景 随着信息技术的高速发展和数字化转型的深入推进,传统图书馆的服务模式面临诸多挑战:空间限制导致藏书容量有限,纸质资源易损…

作者头像 李华
网站建设 2026/7/11 4:38:14

基于spring boot的调查问卷系统的设计与实现(源码+论文+部署+安装)

感兴趣的可以先收藏起来,还有在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望可以帮到大家。一、程序背景在当前信息化快速发展的大环境下,传统纸质问卷调查存在效率低下、成本高昂、地域…

作者头像 李华