c++ 结构体单向链表插入
时间: 2025-02-05 20:05:29 浏览: 32
### C++ 单向链表结构体插入实现
#### 定义节点结构体
为了创建单向链表,首先定义一个表示节点的结构体 `Node`。每个节点包含两部分:存储的数据项以及指向下一个节点的指针。
```cpp
struct Node {
int data;
Node* next;
// 构造函数用于初始化新节点
Node(int val) : data(val), next(nullptr) {}
};
```
#### 创建链表类并初始化
接着构建一个管理这些节点的链表类 `LinkedList`,该类负责处理各种操作如插入、删除等。在构造函数中完成对头部哨兵节点(head node) 的设置[^2]:
```cpp
class LinkedList {
private:
Node* head; // 头部哨兵节点
public:
LinkedList() {
head = new Node(0); // 初始化头结点, 数据域设为任意值(这里设为0)
head->next = nullptr;
}
~LinkedList();
void insertAtBeginning(int value);
void insertAfter(Node* prev_node, int value);
void append(int value);
void printList();
};
```
#### 插入操作的具体实现
##### 在链表开头插入元素
此方法会在链表的第一个实际位置之前添加新的节点,即紧接在虚拟头节点之后的位置。
```cpp
void LinkedList::insertAtBeginning(int value){
Node* newNode = new Node(value);
// 新建节点的下一跳是指向前置头节点后的第一个真实节点
newNode->next = head->next;
// 更新前置头节点使其指向新建节点
head->next = newNode;
}
```
##### 向指定节点后插入元素
如果想要在一个特定已存在节点后面插入一个新的节点,则可以通过传递前驱节点来定位插入点。
```cpp
void LinkedList::insertAfter(Node* prev_node, int value){
if(prev_node == nullptr){
std::cout << "给定的上一节点为空" << std::endl;
return;
}
Node* newNode = new Node(value);
// 将新节点连接到prev_node之后
newNode->next = prev_node->next;
// 修改prev_node让它指向新加入的新节点
prev_node->next = newNode;
}
```
##### 追加至链表末尾
当希望把新元素追加到整个列表最后面时,可以遍历直到找到最后一个节点再执行插入动作。
```cpp
void LinkedList::append(int value){
Node* newNode = new Node(value);
// 需要先到达当前链表末端
Node* last = head;
while(last->next != nullptr){
last = last->next;
}
// 把新节点链接到最后一个节点之后
last->next = newNode;
}
```
以上三种方式展示了不同场景下的插入逻辑,在具体应用过程中可以根据需求选择合适的方法来进行节点插入操作[^1]。
阅读全文