用指针实现链表节点:代码演示与理解
在写一个小型通讯录程序时,发现数据量一多,数组就显得笨重。插入一个人得挪一堆数据,删一个还得补空位,挺麻烦。后来改用链表,灵活多了。核心就是——用指针实现链表节点。
链表不像数组那样连续存放,每个节点自己带地址信息,像一节节火车车厢,靠指针连起来。想加车?找个空位接上就行;想拆?断开指针,重新连一下前后节点就完事。
定义一个节点结构
在 C 语言里,节点通常用结构体表示。里面除了数据,还得有个指向同类结构体的指针。
struct Node {
int data; // 存数据,比如联系人的编号
struct Node* next; // 指向下一个节点的指针
};这里的 next 就是关键。它不存具体值,而是存下一个节点的“门牌号”,也就是内存地址。
创建并连接节点
先用 malloc 动态分配内存,搞出一个节点。
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->data = 1001;
head->next = NULL; // 刚开始只有一个,后面没节点再加一个节点:
struct Node* second = (struct Node*)malloc(sizeof(struct Node));
second->data = 1002;
second->next = NULL;
// 把第一个节点的 next 指向第二个
head->next = second;这时候,head 能找到自己,也能通过 next 找到 second。整个链就连起来了。
遍历链表就像顺着绳子找珠子
从头开始,一个个顺着指针走:
struct Node* current = head;
while (current != NULL) {
printf("联系人编号: %d\n", current->data);
current = current->next; // 移动到下一个节点
}每走一步,current 更新成下一个地址,直到 next 是 NULL,说明到末尾了。
这种结构在做动态数据管理时特别实用。比如演示程序里要实时添加图表数据点,用链表比频繁realloc数组省心得多。
指针看着吓人,但把它当成“下一站导航”来理解,其实挺直观。只要记住每个节点都自带“下一个在哪”的信息,整条链就能跑起来。