如果你刚开始学 C 语言的链表,可能会觉得它有点抽象。其实可以把链表想象成生活中很常见的东西 ——一串糖葫芦,或者一节节连起来的火车车厢。
1. 为什么需要链表?
我们已经学过数组,数组就像一排整齐的抽屉,每个抽屉大小一样,地址连续,想找第 5 个元素,直接算地址就能找到。但数组有个麻烦:大小固定,如果想中途加一个元素,得把后面的全挪位置,很费劲。
链表就解决了这个问题:它的元素(叫 “节点”)可以分散存在内存里,不用挨在一起,通过 “链条” 连起来,增删元素时不用整体挪动,灵活多了。
2. 链表的基本结构:节点
链表的每个 “节点” 就像糖葫芦上的一颗山楂,或者火车的一节车厢,包含两部分:
数据:比如整数、字符、结构体等(就像山楂里的果肉,车厢里装的货物)。
指针:指向 “下一个节点” 的地址(就像山楂之间的竹签,车厢之间的连接挂钩)。
用代码表示就是一个结构体:
struct Node {
int data; // 数据部分(比如存一个整数)
struct Node* next; // 指针部分,指向一下个节点
};
可以理解为:每个节点都带着一个 “地址牌”,上面写着下一个节点在哪儿。
3. 链表的 “链条” 怎么连起来?
第一个节点叫 “头节点”(head),它的指针指向第二个节点。
第二个节点的指针指向第三个节点。
...
最后一个节点的指针指向 NULL(空),表示 “后面没有节点了”。
就像这样:
&n