链表实现解析:结构体与数组两种方式对比
链表是计算机里最经典的数据结构之一,灵活性和动态性让它无处不在。今天咱们聊聊它的两种主流实现:经典的 C++ 结构体方式和高效的数组模拟方式。
一、链表的基本概念
链表是一种线性、动态的结构,由节点通过指针串联而成。和数组不同,它在内存里不需要连续存储,而是靠每个节点里的指针域维持逻辑上的顺序。
主要特点很鲜明:
- 动态大小:随时增删节点,不用预先定死空间
- 插入/删除高效:已知位置操作的时间复杂度是 O(1)
- 顺序访问:只能从头往后读,不支持随机访问
二、结构体实现链表
2.1 节点结构定义
在 C/C++ 里,我们习惯用结构体来定义节点,这跟 Java 的对象或者 JS 的类很像。
struct Node {
int data; // 数据域
Node* next; // 指针域,指向下一个节点
};
Node* next 相当于引用,负责把下一个节点串起来。
2.2 链表构建与遍历
假设我们要建一个存着 1、2、3、4 的链表,结构大概是这样的:头节点 -> 1 -> 2 -> 3 -> 4 -> NULL。
// 创建节点函数
Node* createNode(int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = nullptr;
return newNode;
}
// 构建链表
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
// 遍历链表
void traverseList(Node* head) {
Node* p = head;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
}


