单向链表知识汇总

news2024/9/21 18:59:39

提示:本文章参考知乎大佬和一位博主大佬

单向链表

  • 1.前置知识(部分最好记忆)
    • 1.1 链表组成
    • 1.2 链表插入分三种情况
      • 1.2.1头插
      • 1.2.2 中间插
      • 1.2.2 结尾插
    • 1.3 链表的删除
    • 1.5
    • 1.6
    • 1.7
  • 2.链表各种接口的实现
    • 2.1 链表的打印
    • 2.1 链表的节点的申请
    • 2.2 单链表节点增加
      • 2.2.1 单链表指定位置插入
      • 2.2.1 单链表尾插
    • 2.3 单链表头插


1.前置知识(部分最好记忆)

1.1 链表组成

链表由很多节点组成,每个节点其实是一个结构体变量
当链表无数据,也就是phead为NULL。因为phead是指向第一个存有数据的结点的,也就是第一个节点的地址。
在这里插入图片描述
在这里插入图片描述
在定义结构体类型后,可以通过

struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

创建一个结构体变量(空间),返回结构体变量的地址,也就是节点的地址。
每个节点由二个属性(定义结构体类型时定义的),一个为data(存储数据),一个next(存储下一个节点的地址)

在这里插入图片描述
尾节点为最后一个节点,其后面的无节点(也就是ptail->next 为NULL)
这样在前一个节点连接后一个节点,并为尾节点连接空指针后,我们只需知道头节点的地址,即可根据连接关系,访问整个链表。

所以一般增删查找,都会需要传参ptail(头节点指针) 也就是链表的入口(链表关键参数)。

1.2 链表插入分三种情况

1.2.1头插

在这里插入图片描述
头插之后,phead位置改变,需要重新赋值 同时插入的节点需要链接后面
在这里插入图片描述

1.2.2 中间插

插入的节点,需要连接前面和后面

1.2.2 结尾插

插入的节点,需要连接前面和后面指向NULL

1.3 链表的删除

1.5

1.6

1.7

2.链表各种接口的实现

2.1 链表的打印

void SListPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur != NULL)
	{
		printf("%d->", cur->data);
		cur = cur->next;//相当于指针的后移一位
	}
	printf("NULL\n");
}

在这里插入图片描述

void SListPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur->next != NULL)
	{
		cur = cur->next;//相当于指针的后移一位
		printf("%d->", cur->data);
	}
	printf("NULL\n");
}

2.1 链表的节点的申请

// 动态申请一个结点
SLTNode* BuySLTNode(SLTDataType x)
{
	//同样不需要断言
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));//先创建个结点
	if (newnode == NULL)//如果malloc失败
	{
		perror("malloc fail");
		return NULL;
	}
	//如果malloc成功
	newnode->data = x;//插入的数据
	newnode->next = NULL;//初始化为空
 
	return newnode;//返回newnode  节点地址
}

2.2 单链表节点增加

2.2.1 单链表指定位置插入

2.2.1 单链表尾插

tail为空指针的前一个节点 尾节点指向NULL 即tail->next

// 单链表尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x)
{
    assert(pphead);//pphead是phead的地址,不能为空
 
	SLTNode* newnode = BuySLTNode(x);
	//找尾(尾插之前先找到尾)
	if (*pphead == NULL)//若链表为空
	{
		*pphead = newnode;//把新节点作为头结点
	}
	else//若链表不为空
	{
		SLTNode* tail = *pphead;
		while (tail->next != NULL)   
		//tail为空指针的前一个节点  //尾节点指向NULL  即tail->next
        //对于不为空的链表:尾插的本质是原尾结点要存新尾结点的地址
		{
			tail = tail->next;
		}
		tail->next = newnode;//挪动的指针指向新节点  也就是挪动的指针等于新节点的指针
		/*有些同学会写成:----错误写法
		while (tail != NULL)
		{
			tail = tail->next;
		}
		tail = newnode;*/
	}
}

2.3 单链表头插

// 单链表的头插
void SLTPushFront(SLTNode** pphead, SLTDataType x)
{
   //发现plist不管是否为空,头插的方法都一样
   SLTNode* newnode = BuySLTNode(x);
   newnode->next = *pphead;
   *pphead = newnode;
}

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

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

相关文章

【常微分方程】

框架 常微分方程的概念一阶微分方程可变离分量齐次方程一阶线性微分方程可降阶的高阶微分方程二阶常系数齐次线性微分方程二阶常系数非齐次线性微分方程 讲解 【1】 常微分方程:是微分方程的特殊情况; 阶:是方程未知函数的最高阶导数的阶数&…

关于pycharm上push项目到gitee失败原因

版权声明:本文为博主原创文章,如需转载请贴上原博文链接:https://blog.csdn.net/u011628215/article/details/140577821?spm1001.2014.3001.5502 前言:最近新建项目push上gitee都没有问题,但是当在gitee网站进行了一个…

【笔记:3D航路规划算法】二、RRT*

目录 一、RRT*于RRT的不同之处1、路径优化:2、成本计算:3、重连线步骤: 二、图解1、初始化2、路径搜索3、效果展示 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、虚拟现实…

开源软件项目:趋势、参与经验与收获

在当今这个全球经济与科技日新月异的时代,开源软件项目(Open Source Software, OSS)正以前所未有的速度蓬勃发展,成为推动技术创新、促进产业合作、加速知识共享的重要力量。随着云计算、大数据、人工智能等技术的兴起&#xff0c…

C#入门与精通

C#精通 本文章主要是对于学习C#基础难点进行学习以及与java语言的不同点,详细学习可见官网:https://dotnet.microsoft.com/en-us/learn 文章目录 C#精通VSVS基本设置 C#是什么C#程序控制台输出变量内插占位符C#foreach循环类型转换操作数组内置方法格式设…

Java智慧养老养老护理帮忙代办陪诊陪护小程序系统源码

🌟智慧养老新风尚,护理代办陪诊小程序来帮忙✨ 🏡【开篇:关爱老人,从智慧养老开始】🏡 随着社会的进步,智慧养老已成为新时代孝心的体现。面对忙碌的生活节奏,如何更好地照顾家中长…

三、基础语法2(30小时精通C++和外挂实战)

三、基础语法2(30小时精通C和外挂实战) B-02内联函数B-04内联函数与宏B-05_constB-06引用B-07引用的本质B-08-汇编1-X86-X64汇编B-09-汇编2-内联汇编B-10-汇编3-MOV指令C-02-汇编5-其他常见指令C-05-汇编8-反汇编分析C-07-const引用、特点 B-02内联函数 …

智能时代的伦理困境:如何应对AI引发的社会问题

文章目录 每日一句正能量前言构建可靠的AI隐私保护机制1. **数据最小化原则**2. **数据匿名化和去标识化**3. **加密技术**4. **访问控制**5. **数据使用透明度**6. **用户控制权**7. **数据保护影响评估**8. **法规遵从性**9. **隐私设计**10. **安全意识教育和培训**11. **持…

C++自定义字典树结构

代码 #include <iostream> using namespace std;class TrieNode { public:char data;TrieNode* children[26];bool isTerminal;TrieNode(char ch){data ch;for (int i 0; i < 26; i){children[i] NULL;}isTerminal false;} }; class Trie { public:TrieNode* ro…

Transformer和预训练模型是什么

目前我们使用的OpenAI的ChatGPT是一种基于GPT-3.5或GPT-4的聊天机器人&#xff0c;能够实现人与机器之间的自然语言交互。那么GPT是什么呢&#xff1f; GPT是一种语言模型&#xff0c;它是由OpenAI实验室于2018年推出的基于Transformer架构的预训练语言模型&#xff0c;通过处理…

matlab y = 1/√x图像和y = 1/x图像

matlab y 1/√x图像和y 1/x图像 y 1/√x与y 1/x绘制结果y√x y 1/√x与y 1/x clc, clear, close all; length 3; axis_len 5;% Create a range of x values x linspace(0.01, length^2, 1000); % Avoid x 0 for 1/√x% Compute the corresponding y values y1 1 .…

2024.7.23(DNS正向解析)

回顾&#xff1a; # 安装 samba yum -y install samba # 自建库&#xff0c;只下载&#xff0c;不安装 yum -y install --downloadonly --downloaddir./soft/ # 配置samba vim /etc/samba/smb.conf # 配置 [xxxxxxxname] commentdasdffsffdslfdjsa path/share …

hadoop大数据安全管理:ldap、keberos、ranger

hadoop大数据中认证一般用keberos&#xff0c;授权用ranger&#xff0c;kerberos和Ldap组件共同组成整个集群的安全鉴权体系&#xff0c;Ldap负责用户数据存储。 kerberos Kerberos 是一种网络认证协议&#xff0c;用于在不安全的网络中以安全的方式对用户和服务进行身份验证。…

05-用户画像+mysql-hive数据导入

将用户数据导入数仓 新建 create_hive_table.sh文件 在终端执行以下文件 sh create_hive_table.sh sqoop create-hive-table \ --connect jdbc:mysql://up01:3306/tags_dat \ tags_dat库名 --username root \ root 用户名 --password 123456 \ 123456 密码 --ta…

Vuex数据持久化实现

版本&#xff1a;vue 3.4.29 vuex4.1.0 1. 出现的问题 当我使用 vuex 作为状态管理组件来存储用户的一些信息之后&#xff0c;发现从/login 页面跳转到/home 界面后拿不到vuex信息。 之后查阅资料了解&#xff0c;当切换路由后&#xff0c;vue 会重新渲染&#xff0c;而vuex 也…

Java——————接口(interface) <详解>

1.1 接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本电脑上的USB接口&#xff0c;电源插座等。 电脑的USB口上&#xff0c;可以插&#xff1a;U盘、鼠标、键盘...所有符合USB协议的设备 电源插座插孔上&#xff0c;可以插&#xff…

小程序收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

NC65 还款单的冲借款还款金额和报销单中冲借款的还款金额的计算逻辑

被报销单的冲借款界面中还款单金额计算逻辑&#xff0c;困扰了两天&#xff0c;无意中操作了&#xff0c;才搞清楚计算的逻辑&#xff08;感觉有点反人类&#xff09;。明明可以借款金额减去冲借款金额等于还款金额就行了&#xff0c;非得冲借款金额减去报销金额等于还款金额。…

数学基础【俗说矩阵】:逆矩阵

逆矩阵知识 认识逆矩阵 当最矩阵A【左乘】【初等阵】多次&#xff08;也就是进行多次【初等行】变化&#xff09;后&#xff0c;得到了一个【单位阵E】。由于矩阵具有结合律&#xff0c;把矩阵A【左乘】的所有【初等阵】乘起来&#xff0c;就得到了一个新的矩阵。我们称这个能…