链表中二级指针与一级指针的深度剖析(保姆级代码示例教学)

以如下为例:

typedef int SLTDataType;

typedef struct SListNode

{

SLTDataType data;

struct SListNode* next;

}SLTNode;

若想在此链表中尾插一个数据(新的结构体):

思路:

利用一个指针tail,找到链表的尾部,在尾部的 next 指针中连接好新的元素

一、代码与注释

void SLPushBack(SLTNode** pphead, SLTDataType x)

{

SLTNode* newnode = BuyLTNode(x); //将newnode指向新开的结构体空间

// 1、空链表

// 2、非空链表

if (*pphead == NULL) //本身链表为空

{

*pphead = newnode; //直接将开辟的新结构体空间,让*pphead指向新开辟的空间

}

else

{

SLTNode* tail = *pphead; //解引用,变成一级指针,因此:tail可以找到实参,并对实参进修操作、修改!

//尾节点的特点是 tail -> next为空

while (tail->next != NULL) //不可以tail != NULL 如果是这样的话,tail会最终直接指向下一个链表,而不是将其与紧接着的tail - > next这个结构体指针连接起来(可以理解为火车脱节)

{

tail = tail->next;

}

//为结构体指针 next 赋值。(- >可以修改实参)

//整体逻辑:二级指针->一级指针->成员(成员又是一个结构体指针)

tail->next = newnode; // ->再次解引用 (结构体的解引用,使用的符号是 - > ,此语句的含义是:为结构体中的next指针赋值,指向newnode空间)

}

}

二、指针解析(好好看完注释!)

1.传参传二级指针

理由:

对应代码

SLTNode* tail = *pphead; //解引用,变成一级指针,因此:tail可以找到实参,并对实参进修操作、修改!

传入二级指针之后,通过解引用,可以让tail指针找到实参

代码解析:

tail->next = newnode; // ->再次解引用 (结构体的解引用,使用的符号是 - > ,此语句的含义是:为结构体中的next指针赋值,指向newnode空间)

此处的------>可以理解为结构体中的解引用操作!

tail是一级指针,并且是结构体指针,可以通过------>找到结构体成员变量 next。

值得一提的是,next作为成员变量,本身就是一个结构体指针!

此代码的意思就是:让 一级指针 tail 找到结构体成员变量:next,并且让其指向newnode开辟的空间。

题外话:

作为链表,值得一提的是,新开辟的newnode空间并非在物理上是连续的,但是却能让next指针找到这块空间,从而让物理上不连续的空间,在逻辑上可以用连续的思维去分析。

相关推荐
吞下星星的少年·-·1 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
Msshu1235 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
动词ing7 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
a187927218318 小时前
【算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本
数据结构·算法·leetcode·链表·go·指针·环形链表
zcmodeltech9 小时前
火电厂模型能演示冷态启动和故障处理吗?——基于STM32与Modbus RTU的集控实训控制系统设计
数据结构·stm32·单片机·嵌入式硬件·能源
Doubbbbbbble云9 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
David猪大卫9 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
linx29511 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
布莱克60511 小时前
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序
数据结构·c++·算法·排序算法
科学实验家13 小时前
最小生成树:Prim,kruskal
数据结构·c++·算法