一、链表的基本概念
这一节讲解一下C语言中的链表,并且只讲解单链表。在单链表中,每一个节点包含一个指向链表下一个节点的指针。链表最后一个节点的指针字段的值为NULL,提示链表后面不再有其他节点。在你找到链表的第一个节点后,指针就可以带你访问剩余的所有节点。为了记住链表的起始位置,可以使用根指针(root pointer)。根指针指向链表的第一个节点。根指针只是一个指针,它不包含任何数据。示意图如下:
所以,我们可以根据链表的结构,创建对应的结构体:
typedef struct NODE {
struct NODE *link;
int value;
} Node;
1. 每个节点中保存了下一个节点的地址,用 *link存储。
2. 每个节点中又有自己的值,存储在value中。
在上面的图中,这些节点相邻在一起,这是为了显示链表所提供的逻辑顺序。事实上,链表中的节点可能分布于内存中的各个地方。各节点在物理上是否相邻并没有什么关系,因为程序始终用链(指针)从一个节点移动到另一个节点。
二、 单链表的插入
假设我们有一个新值12,想把它插入到上图的链表中。思路是非常清晰的,从链表的起始位置开始,跟随指针直到找到第一个值大于12的节点,然后把这个新值插入到那个节点之前的位置。但是前一个节点的指针字段必须进行修