单链表进阶

之前已经介绍过单链表及其一些简单的功能

这次来简单介绍单链表一些的其他接口

1.在指定位置之前插入数据

具体原码,三个参数,phead是链表的指针,pos是节点的地址,x是需要插入的数据。

pos不能为空指针,因为pos为空指针我们就无法插入了,其次是phead和*phead也不能是空指针,*phead是空链表就无法从其中一个链表之前插入数据了。然后通过BuyNode得到要插入的数据的地址,用tmp来接收,然后考虑如果pos 是头结点的话,直接让pos的next等于链表地址,然后再让链表地址等于pos的地址,这样就完成插入了。

如果pos不是头节点的话就进入else,首先定义一个pcur指针,通过循环,当pcur的next不是pos就一直向后走,直到pcur的next是pos时,此时就退出循环,先将pos插入tmp上,再将tmp插入到pcur-next就可以了,然后达到了指定数据前插入数据的效果。

2.在指定数据之后插入数据

在指定数据之后插入数据有两种思路,第一种是先将plist->next等于newnode再将后面数据拼到newnode后面,第二种是直接将pos后面数据插入到newnode然后再将newnode插入到pos->next上。想一下,这两种哪种不可行,仔细一想,第一种是不可行的,为什么呢,因为当把pos->的数据存储newnode时,此时后面的数据就找不到了啊。但是也不是不可解决的, 我们可以用一个临时指针来存储后面那个地址,这样就可以找到后面的地址。

源代码

这个代码就很简单就不简述了。

3.删除节点

要删除节点,首先能肯定的是*phead和phead不能为空指针,其次pos也不能为空指针,因为pos如果为空的话就没必要删除了,源代码

void SLTErase(SLTNode** phead, SLTNode* pos)
{assert(phead, *phead);assert(pos);if (*phead == pos){SLTPopFront(phead);}else{SLTNode* ptail = *phead;while (ptail->next != pos) {ptail = ptail->next;}ptail->next = pos->next;free(pos);pos = NULL;}
}

4.删除pos之后的节点

        

删除pos之后的数据不用修改链表,只用把pos的next的next的值存放到pos的next上就行,用临时指针来接收pos—>next,然后销毁这个数据的空间即可。

void SLTEraseAfter(SLTNode* pos)
{assert(pos);SLTNode* tmp = pos->next;pos->next = tmp->next;free(tmp);tmp = NULL;	}

5.销毁链表

销毁链表需要将链表的每一个数据都要进行销毁,首先要保证phead和*phead都不是空指针。

然后通过一个循环来遍历链表,先定义while循环,然后循环终止的条件是链表走到NULL了,此时就可以退出循环了,先定义一个pcur来接收*phead,条件就为pcur,先进入循环,定义一个中间指针,next,然后释放pcur再让pcur指向中间指针的地址,通过这个循环,就可以释放所有的链表数据,最后将链表置为空,这样就实现了链表的释放。

void SLTDestory(SLTNode** phead)
{assert(phead && *phead);SLTNode* pcur = *phead;while (pcur){SLTNode* next = pcur - next;free(pcur);pcur = next;}*phead = NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/150098.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪

原理构造法 令ans c1 c2 .. cn ci 余数 * &#xff08;c1乘到cn但不乘ci&#xff09;* &#xff08;c1乘到cn但不乘ci 的逆元&#xff0c;模ci意义下&#xff09; 定理&#xff1a;在模M c1乘到cn 意义下&#xff0c;解唯一。 #include<bits/stdc.h> #define in…

如何修改音频的音量增益

一、前言 在开发音频相关的功能&#xff08;比如说语音通话、播放音乐&#xff09;时&#xff0c;经常会遇到音量太小的问题&#xff0c;这时候就需要我们对原始数据进行处理。本文将介绍如何通过修改原始音频数据来增加增益&#xff0c;本文包含如下内容&#xff1a; 1.音频数…

HTML标题标签与其属性

在HTML中标题是通过<h1..6> </h1...6>标签进行定义的。其中<h1>是定义最大的标题&#xff0c;<h6>是定义最小的标题。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

项目启动卡住不动Property ‘mapperLocations‘ was not specified.

问题如上图所示&#xff1b; 原因&#xff1a;在mapper打了个断点&#xff01;

Mapbox封装图形绘制工具 线,圆,polygon,删除,点 mapbox-gl-draw-circle mapbox-gl-draw

使用插件&#xff0c;安装 npm install mapbox-gl-draw-circle //绘制圆 npm install mapbox/mapbox-gl-draw //绘制点线面删除相关API地址&#xff1a;https://github.com/mohong/mapbox-gl-draw-circle https://github.com/mapbox/mapbox-gl-draw/blob/main/docs/API.md…

大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询

文章目录 案例实践——淘宝母婴数据加速查询 一、​​​​​​​创建数据库表并导入数据 二、​​​​​​​​​​​​​​创建session集群 三、​​​​​​​​​​​​​​源表查询 四、​​​​​​​​​​​​​​指标计算 案例实践——淘宝母婴数据加速查询 随着…

【信息论基础第三讲】再谈离散信源的信息测度之熵的性质多符号信源的信息测度

一、Piece Of Cake 1、离散信源X的熵是H(X)是一个常数而不是一个变量 解释&#xff1a;离散信源的熵也就是自信息I(X)的数学期望&#xff0c;即H(X) E[I(Xi)]&#xff0c;而通过概率论的知识我们知道数学期望是一个常数&#xff0c;故熵也是一个常数。 2、八元编码系统&…

9.24工作笔记

filter_list的用法 在before_filter函数中用到&#xff0c;过滤了filter因子排名前80%的数据 保温杯4 采用纯多和中性轮动的策略 dpo DPO&#xff08;区间震荡线&#xff09;计算公式 公式&#xff1a; [ \text{DPO} \text{CLOSE} - \text{REF}(\text{MA}(\text{CLOSE},…

基于大数据爬虫+数据可视化大屏+Python的广东省人口流动数据分析设计和实现(源码+论文+部署文档等)

博主介绍&#xff1a;✌全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLM…

LCD1602

LCD1602 是一种工业字符型液晶显示屏&#xff0c;能够同时显示 16x2 即 32 个字符。 LCD的显示控制 通过向 LCD1602 发送指令和数据来控制其显示内容。指令包括清屏、设置光标位置、显示模式等&#xff1b;数据则是要显示的字符的 ASCII 码。LCD1602 内部有一个控制器&#x…

中兴数通产品厉害了,获得CC EAL3+认证!

不知道朋友们最近听说没有&#xff0c;中兴的数通产品是真争气&#xff0c;有25款成功通过了国际信息技术安全评估通用准则CC的EAL 3级别认证。中兴一直是通讯行业的领先企业&#xff0c;这次CC EAL 3级别认证覆盖了多款主流设备型号&#xff0c;证明了它在网络安全领域的实力确…

使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统

要使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统&#xff0c;您可以按以下步骤进行。这个系统将利用 Loki 作为日志存储和聚合系统&#xff0c;Loki4j 作为 Java 的日志插件&#xff0c;Grafana 用于日志的可视化。 1.工具介绍&…

CF1994 F. Stardew Valley [欧拉回路+树上差分]

传送门 [前题提要]:自模板题以后,很少遇到欧拉回路的题目,正好这道题结合了多种经典算法,故写一篇题解记录一下 读完题面,因为需要经过所有1边,所以很显然会想到应该将所有的1边拿出来建一个新图,然后在新图上添加0边,使得新图是一个欧拉图. 让我们来回忆一下什么是欧拉图.对…

【秋招笔试题】多多的平均值

解法&#xff1a;抽掉的两个数字之和为2倍的平均数&#xff0c;那么判断一下2倍的平均数是不是整数。然后在搞一个哈希表存取过的值即可。 package com.sky;import java.util.*;public class Test1 {public static void main(String[] args) {Scanner scanner new Scanner(Sy…

计算机研一规划2024/9/22

系列文章目录 文章目录 系列文章目录前言一、两条腿走路二、编程语言能力提升1.廖雪峰的python课2.Leetcode&#xff08;数据结构题&#xff09; 三、机器学习能力提升1.统计学习方法 李航2.kaggle竞赛 四、神经网络能力提升1.神经网络与深度学习 邱锡鹏2.一套自己的万金油模板…

openai最新o1上线(2024年09月12日)

gpt-4o-2024-08-06输出文本价格 10美元/M o1-preview输出价格 60美元/M https://lmarena.ai/?leaderboard 数字9.11和9.8谁大些 人工智能学习网站 https://chat.xutongbao.top/

Vue(16)——Vue3.3新特性

defineOptions 在 Vue 3.3 之前&#xff0c;如果需要在 <script setup> 中设置组件名&#xff0c;通常需要在额外的 <script> 标签中使用 Options API 进行配置。defineOptions 是 Vue 3.3 版本中引入的一个宏&#xff08;macro&#xff09;&#xff0c;它主要用于…

C++ bitset(位图)的介绍和使用

文章目录 一、bitset的介绍1. 位图的引入2. 位图的概念3. 位图的应用场景 二、bitset的使用1. 定义方式2. 成员函数3. 运算符重载 一、bitset的介绍 1. 位图的引入 面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是…

2024年蓝牙网关市场热门产品选购宝典

在本文中&#xff0c;我们将探讨不同类型的蓝牙网关及其分类&#xff0c;并提供一份指南&#xff0c;帮助您筛选出最适合的物联网网关。 室内蓝牙网关 室内网关通常用于智能建筑解决方案&#xff0c;如智能家居、零售店、购物中心和办公室。 这些网关的覆盖范围较短&#xff…

人工智能代表——无人驾驶:萝卜快跑

人工智能如何改变我们的出行&#xff1a;以“萝卜快跑”无人驾驶为例 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的方式渗透并改变着我们的日常生活&#xff0c;其中出行方式的变革尤为显著。在众多AI驱动的出行创新中&#xff0c;“萝卜…