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

【数据结构】常见时间复杂度以及空间复杂度

【数据结构】常见时间复杂度以及空间复杂度

时间复杂度与空间复杂度 * 一、复杂度的概念 * 二、时间复杂度 * 1、大O的渐进表示法 * 2、函数clock计算运算时间 * 3、常见复杂度对比 * 3.1常数项复杂度 * 3.2线性时间复杂度 * 案例1 * 案例2 * 3.3平方阶复杂度 * 3.4对数复杂度 * 3.5递归函数 * 单递归 * 双递归 * 三、空间复杂度 * 冒泡排序O(1) * 三个反置O(N) 一、复杂度的概念 * 一个算法的好坏,主要是对比两者的时间和空间两个维度,也就是时间和空间复杂度。 * 时间复杂度主要衡量一个算法运行的快慢,空间复杂度主要衡量一个算法运行需要的额外空间 二、时间复杂度 * 算法的时间复杂度是一个函数式T(N),算法中的基本操作的执行次数,为算法的时间复杂度。 * 注:编译器的不同,编译所需要的时间也不同。越新的编译器,编译的时间往往比旧的编译器快 * 当一个算法函数式为T(

By Ne0inhk
Flutter 三方库 statistics 鸿蒙高性能数据回归科学系统全域适配:将顶尖数理统计算法与重负载大模型双栈引擎植入微距节点彻底盘活泛计算终端底层数据-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 statistics 鸿蒙高性能数据回归科学系统全域适配:将顶尖数理统计算法与重负载大模型双栈引擎植入微距节点彻底盘活泛计算终端底层数据-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 statistics 鸿蒙高性能数据回归科学系统全域适配:将顶尖数理统计算法与重负载大模型双栈引擎植入微距节点彻底盘活泛计算终端底层数据感知系统 前言 在鸿蒙生态的智慧医疗、金融理财及运动健康类应用中,实时对传感器数据或业务流水进行深度统计分析是核心能力。例如,通过运动步频计算方差以识别走跑状态,或根据心率波动进行回归分析以预测压力指数。statistics 库作为 Dart 生态中轻量且纯粹的数学工具集,为这类需求提供了高性能的底层支持。本文将探讨如何在 OpenHarmony 上适配该库,实现设备侧的大数据即时运算。 一、原理解析 / 概念介绍 1.1 基础原理/概念介绍 statistics 库不依赖外部厚重的二进制 C++ 库,它通过 Dart 语言级优化实现了对 Iterable<num> 的原生扩展。其核心逻辑聚焦于描述性统计(Descriptive Statistics)与回归模型(Regression

By Ne0inhk
动态规划 线性 DP 五大经典模型:LIS、LCS、合唱队形、编辑距离 详解与模板

动态规划 线性 DP 五大经典模型:LIS、LCS、合唱队形、编辑距离 详解与模板

文章目录 * 最长上升子序列 * 【模板】最长上升子序列 * 合唱队形 * 牛可乐和最长公共子序列 * 编辑距离 经典线性 dp 问题有两个:最⻓上升⼦序列(简称:LIS)以及最⻓公共⼦序列(简称:LCS),这两道题⽬的很多⽅⾯都是可以作为经验,运⽤到别的题⽬中。⽐如:解题思路,定义状态表⽰的⽅式,推到状态转移⽅程的技巧等等。 因此,这两道经典问题是需要我们重点掌握的。 最长上升子序列 题目描述 题目解析 本题介绍最长上升子序列的一般解法,当数据量不大时用这种解法。 在此之前,小编先区分一下子数组和子序列,子数组需要是连续的,而子序列可以是间断的。 1、状态表示 dp[i]表示以i结尾的所有子序列中,最长的上升子序列。

By Ne0inhk
《算法题讲解指南:优选算法-双指针》--01移动零,02复写零

《算法题讲解指南:优选算法-双指针》--01移动零,02复写零

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 一、双指针算法介绍   1、对撞指针   2、快慢指针 01、移动零 题目链接: 题目描述: 题目示例: 算法思路: 算法流程: C++ 代码演示: 算法总结: 02、复写零 题目链接: 题目描述: 题目示例: 算法思路: 算法流程: C++代码演示: 算法总结及流程解析: 结束语 一、双指针算法介绍       在正式讲解本次的算法题之前我们先来看看算法中一个非常常用的方法——双指针。双指针有两种形式,一种对撞指针,一种是左右指针。   1、对撞指针

By Ne0inhk