链表(linked-list)
链表是线性表的链式存储方式,链表的内存是不连续的,链表通过一个指向下一个元素地址的引用将所有的元素串起来。
链表的分类
单向链表
单向链表是最简单的链表形式。链表中最基本的元素称为节点(node),每个节点包含了数据域和指向下一个节点的指针。
头结点
图中最上面的head结点,头结点可以不存储任何数据,头结点的指针域存放的是指向第一个结点的指针。
头结点的作用是使所有的链表(包括空链表)的头指针非空,并且对单链表的插入、删除操作不需要区分是否为空表,或者是否在第一个位置进行,从而与其他位置的插入删除操作一致。
头指针
头指针是指向链表中第一个结点的指针,注意:有头结点的链表,指的就是头结点的指针域中存放的指针。
单链表可以没有头结点,但不能没有头指针。
typedef struct node{
int val;
struct node *next;
} Node;
- 双向链表
- 循环链表