C++链表节点的添加和删除介绍
作者:与C决战的小萝卜头 发布时间:2023-08-23 02:32:09
标签:C++,链表
前言
链表是一种动态的数据结构,因为在创建链表时,不需要知道链表的长度,只需要对指针进行操作。
1. 节点的创建
链表的节点包括两部分,分别是:数据域和(指向下一个节点的)指针域。
struct Node {
int data;
struct Node* next;
};
2. 链表的定义
struct Node* createList() {
//创建一个指针来表示表头
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
headNode->next = NULL;
return headNode;
}
3. 创建节点
struct Node* createNode(int data) {
//创建一个新的指针节点
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
//结构体变量初始化
newNode->data = data;
newNode->next = NULL;
return newNode;
}
4. 节点的插入
节点的插入分为三种:头插法、尾插法、在链表中间插入节点。
4.1 头插法
头插法,顾名思义就是在链表的第一个节点插入一个节点。
解决方法:让新插入的节点的next指针指向链表的头结点即可。
void insertNodeByHead(struct Node* headNode, int data) {
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
4.2 尾插法
尾插法,顾名思义就是在链表的末尾增加一个节点。
解决思路:首先找到链表的最后一个节点;然后让最后的节点的next指针指向要插入的这个节点,插入的节点的next指针指向NULL即可。
void insertNodeByTail(struct Node* headNode, int data) {
struct Node* newNode = createNode(data);
while (headNode->next != NULL)
{
headNode = headNode->next;//找到最后一个节点
}
headNode->next = newNode;
newNode->next = NULL;
}
4.3 插入中间节点
插入中间节点:即在数据为 i 的节点后面添加新的节点。
解决思路:首先判断数据为 i 的节点posNode是否在链表中存在;然后从第一个节点开始查找节点posNode。找到后就让插入的节点的next指针指向posNode的下一个节点,posNode的next指针指向新插入的节点即可。
void insertNodeByCenter(struct Node* headNode, int data, int i) {
struct Node* posNode = headNode;
/*struct Node* posNodeFront = headNode;*/
struct Node* newNode = createNode(data);
if (posNode == NULL) {
printf("无法查找此数据,链表为空\n");
}
else {
while (posNode->data != i) {
posNode = posNode->next;//前面位置到达了后面节点的位置
/*posNode = posNodeFront->next;*///后面位置变成了原来位置的下一个
if (posNode == NULL) {
printf("未找到此数据\n");
break;
}
}
newNode->next = posNode->next;
posNode->next = newNode;
}
}
总结
来源:https://blog.csdn.net/qq_47635065/article/details/122388071


猜你喜欢
- 废话不多说了,给大家贴关键代码了,具体代码如下所示:import java.io.File;import java.io.FileOutpu
- mybatis-plus 查询传入参数Map,返回List<Map>原因有时实体类属性不够用,又不想写自定义VO了,所以用map
- 新建一个集合List<Bill> billList = new ArrayList<>();将订单中所有物品的名称提
- 目录一、使用BeanFactoryPostProcessor注入Bean:第一步:创建实现SpringUtils 接口工具(组件)来获取sp
- 本文实例为大家分享了java实现人机猜拳游戏的具体代码,供大家参考,具体内容如下完成人机猜拳互动游戏的开发,用户通过控制台输入实现出拳,电脑
- 前言爱美之心人皆有之,在 unix 和 linux 命令行环境下工作的闷骚程序员们可能也觉得命令行太单调了,而是他们就发明了在命令行下采用
- 本篇随笔将讲解一下Android当中比较常用的两个布局容器--ScrollView和HorizontalScrollView,从字面意义上来
- 本文实例讲述了C#获取CPU编号的方法。分享给大家供大家参考。具体如下:/// <summary>/// Gets the cp
- 因为支持csv,所以就一块写上了Workbook,Worksheet using Aspose.Cells(第三方)把Excel读取到属性对
- Settings -> Editor -> General -> Use soft wraps in editor&nbs
- 目录SpringBoot整合OpenApiOpenAPI依赖编写配置类改造优化OpenAPI常用注解介绍实体类controller类演示网上
- 1. 通过字节流实现文件的拷贝 /** * 通过字节流实现文件的拷贝 * @param sourcePath 源
- 引言Object类是所有类、数组的父类,位于java.lang 包下也就是说,Java允许把所有任何类型的对象赋给Object类型的变量。当
- 自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现: 注意以下类,接口都是在一个命名空间下栈的接口:包括了常用的方法namespac
- requestFoucs();无效。requestFoucsFromTouch();无效。webview.setTouchListener;
- 本文实例讲述了C#4.0新特性的协变与逆变,有助于大家进一步掌握C#4.0程序设计。具体分析如下:一、C#3.0以前的协变与逆变如果你是第一
- 我就废话不多说了,大家还是直接看代码吧~/// <summary> /// 字符串转Unicode //
- 一、本文来由由于网络不稳定的原因,所以想着启动本地nacos来运行项目,但是nacos启动没问题了,但是依旧报错。Caused by: co
- 写了一个可以扫描附近蓝牙设备的小Demo,可以查看蓝牙设备的设备名和Mac地址代码量不多,很容易看懂/** * 作者:叶应是叶 * 时间:2
- 一、医院接口本文继续开发分布式医疗挂号系统,进入到医院信息、科室、排版接口的开发,内容比较枯燥。关于医院医院信息的上传接口实现,已经在上一篇