C++链表节点的添加和删除介绍

 更新时间:2022年01月10日 08:58:12   作者:与C决战的小萝卜头  
大家好,本篇文章主要讲的是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;
	}
}

 总结

到此这篇关于C++链表节点的添加和删除介绍的文章就介绍到这了,更多相关C++链表节点内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言container of()函数案例详解

    C语言container of()函数案例详解

    这篇文章主要介绍了C语言container of()函数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 在C++ 中慎用setjmp和longjmp解析

    在C++ 中慎用setjmp和longjmp解析

    setjmp和longjmp是C语言中用于实现非局部跳转的函数,setjmp和longjmp 是 C 语言中一个很强大的函数,这篇文章主要介绍了在C++ 中慎用setjmp和longjmp的相关知识,需要的朋友可以参考下
    2023-06-06
  • Opencv绘制最小外接矩形、最小外接圆

    Opencv绘制最小外接矩形、最小外接圆

    这篇文章主要为大家详细介绍了Opencv绘制最小外接矩形、最小外接圆的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 浅谈返回函数内部new分配的内存的引用

    浅谈返回函数内部new分配的内存的引用

    下面小编就为大家带来一篇浅谈返回函数内部new分配的内存的引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 数据结构C语言链表的实现介绍

    数据结构C语言链表的实现介绍

    大家好,本篇文章主要讲的是数据结构C语言链表的实现介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2021-12-12
  • c++统计文件中字符个数代码汇总

    c++统计文件中字符个数代码汇总

    本文给大家汇总介绍了3种使用C++实现统计文件中的字符个数的方法,非常的简单实用,有需要的小伙伴可以参考下。
    2015-09-09
  • C指针原理教程之语法树及其实现

    C指针原理教程之语法树及其实现

    本文给大家分享的是如何使用C语言的指针原来来实现语法树,并给大家提供了详细的实例代码,希望大家能够喜欢
    2019-02-02
  • C语言学籍管理系统源代码

    C语言学籍管理系统源代码

    这篇文章主要为大家详细介绍了C语言学籍管理系统源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C/C++ QT实现解析JSON文件的示例代码

    C/C++ QT实现解析JSON文件的示例代码

    JSON是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据。这篇文章主要介绍了QT实现解析JSON文件的示例代码,需要的可以参考一下
    2022-01-01
  • C语言实现航班订票系统

    C语言实现航班订票系统

    这篇文章主要为大家详细介绍了C语言实现航班订票系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12

最新评论