代码随想录|链表基础

链表含义

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成。有单链表、双链表和循环链表。相比于数组更为灵活。

链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。

头结点、头指针和首元结点

上图所示的链表并不完整,一个完整的链表应该由以下几部分构成:

  1. 头指针:一个和结点类型相同的指针,它的特点是:永远指向链表中的第一个结点。上文提到过,我们需要记录链表中第一个元素的存储位置,就是用头指针实现。

  1. 结点:链表中的节点又细分为头结点、首元结点和其它结点:

  • 头结点:某些场景中,为了方便解决问题,会故意在链表的开头放置一个空结点,这样的结点就称为头结点。也就是说,头结点是位于链表开头、数据域为空(不利用)的结点。

  • 首元结点:指的是链表开头第一个存有数据的结点。

  • 其他节点:链表中其他的节点。

也就是说,一个完整的链表是由头指针和诸多个结点构成的。每个链表都必须有头指针,但头结点不是必须的。

例如,创建一个包含头结点的链表存储 {1,2,3},如下图所示:

完整的链表示意图

再次强调,头指针永远指向链表中的第一个结点。换句话说,如果链表中包含头结点,那么头指针指向的是头结点,反之头指针指向首元结点。

链表(单链表)是什么 (biancheng.net)

链表定义

初始化

typedef int SLTDataType;//typedef给数据格式重命名 给结构体定义名称为 SListNode
typedef struct SListNode
{
    SLTDataType data;
    struct SListNode* next;//结构体中使用自身结构体  结构体指针 (struct可以省略)
}SListNode,SLN;//给结构体定取别名为 SLN
//typedef struct Student SStudent; 还可以这样 用 typedef 给结构体取别名

删除/添加链表节点:指针移位即可 时间复杂度O(1)

注:删除最后一个节点的时间复杂度是O(n),因为需要从头节点查找到倒数第二个节点通过next指针进行删除操作

【C语言】链表太难学不懂?看这一篇就够了_慕雪华年的博客-CSDN博客_c语言链表
(14条消息) C语言链表操作详解_顾十方的博客-CSDN博客_链表c语言
链表(单链表)是什么 (biancheng.net)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值