news 2026/5/1 9:18:02

【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/5/1 8:12:39

用Matplotlib绘制专业图表:从基础到高级

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。 目录 安装SQLAlchemy 核心概念 连接数据库 定义数据模型 创建数据库表 基本CRUD操作…

作者头像 李华
网站建设 2026/5/1 8:12:47

内存泄漏自动检测系统

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

作者头像 李华
网站建设 2026/4/23 16:29:38

Thinkphp和Laravel智能化智能化电子相册图片管理系统_84ds3

目录 ThinkPHP与Laravel智能化电子相册系统对比 项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理 ThinkPHP与Laravel智能化电子相册系统对比 ThinkPHP实现方案 ThinkPHP适合快速开发中小型电子相册系统,内置图像处理库(如t…

作者头像 李华
网站建设 2026/5/1 6:09:36

Java 编程语言单词汇总----step-25

step-25 掌握 1、lambda[lmdə] n. 希腊字母的第 11 个 2、functional[fʌŋkʃənl] adj. 功能的 3、interface[intəfeis] n. 界面;接口;接触面 4、consumer[kənsju:mə] n. 消费者;用户,顾客 5、supplier[səplaɪə] n. 供应…

作者头像 李华
网站建设 2026/5/1 7:08:23

8个降AI率工具推荐!研究生高效降AIGC神器

8个降AI率工具推荐!研究生高效降AIGC神器 AI降重工具,研究生论文的隐形护盾 在当前学术写作中,AI生成内容(AIGC)已成为一种常见现象,尤其对于研究生群体而言,如何有效降低AI痕迹、提升论文原创性…

作者头像 李华
网站建设 2026/4/23 20:19:47

UI测试工具的革命:从Selenium到Playwright的范式转移

Selenium的衰落与测试工具生态的演变 2026年,软件测试领域见证了前所未有的变革。Selenium作为长期主导的UI自动化工具,市场份额从2025年的40%以上骤降至29.1%,正式跌出前三甲。这一下滑源于其固有痛点:元素定位不稳定、跨浏览器…

作者头像 李华