news 2026/5/16 13:12:41

【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/2 17:48:01

高级爬虫技巧:处理JavaScript渲染(Selenium)

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

作者头像 李华
网站建设 2026/5/16 1:52:41

使用Docker容器化你的Python应用

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

作者头像 李华
网站建设 2026/5/15 9:45:15

计算机毕设 java 框架的宠物领养管理系统 基于 SpringBoot 的宠物领养服务平台 Java 流浪宠物救助与领养管理系统

计算机毕设 java 框架的宠物领养管理系统 2si869(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联系 可分享 当前流浪宠物领养存在信息分散、领养流程不规范、后续追踪缺失等问题,难以实现领养…

作者头像 李华
网站建设 2026/5/2 14:47:28

如何为开源Python项目做贡献?

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

作者头像 李华
网站建设 2026/5/14 18:47:52

C++中的命令模式实战

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

作者头像 李华
网站建设 2026/5/15 14:58:00

为什么你的测试团队总在“手动验证”?——深度解析与应对策略

在快速迭代的软件开发环境中,“手动验证”似乎成了测试团队的“标配”。当周五深夜的回归测试、节假日的紧急缺陷复现成为常态时,我们不禁要问:为什么自动化浪潮下,手动测试依然占据主导?这不是简单的效率问题&#xf…

作者头像 李华