构造一个单链表 包括 头插入 尾插入 删除 搜索 清空函数 遍历 并封装函数c++
时间: 2024-09-30 10:09:41 浏览: 35
在 C++ 中,构建一个单链表数据结构通常包括以下几个核心操作:
1. **头插入 (Insert At Head)**: 可以创建一个新的节点,并将其指针设置为当前头节点,然后更新头节点的指针指向新节点。示例代码如下:
```cpp
struct Node {
int data;
Node* next;
};
void insertAtHead(Node** head, int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
```
2. **尾插入 (Insert At Tail)**: 首先找到链表的最后一个节点,然后在其 `next` 指针上添加新节点。如果链表为空,则直接将新节点设为头节点。
```cpp
void insertAtTail(Node** head, int value) {
if (*head == nullptr) {
insertAtHead(&(*head), value);
return;
}
Node* current = *head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new Node{value, nullptr};
}
```
3. **删除 (Delete)**: 根据需要删除特定值的节点。例如,可以遍历链表查找目标节点并移除其前驱节点。
```cpp
void deleteNode(Node** head, int value) {
if (*head == nullptr) {
return;
}
if ((*head)->data == value) {
Node* temp = *head;
*head = *head->next;
delete temp;
return;
}
Node* current = *head;
while (current->next != nullptr && current->next->data != value) {
current = current->next;
}
if (current->next != nullptr) {
current->next = current->next->next;
delete current->next;
}
}
```
4. **搜索 (Search)**: 遍历链表寻找指定值的节点。
```cpp
Node* search(Node* head, int value) {
Node* current = head;
while (current != nullptr) {
if (current->data == value) {
return current;
}
current = current->next;
}
return nullptr; // 如果未找到,返回nullptr
}
```
5. **清空 (Clear)**: 释放链表中所有节点的内存,并将头节点设置为 `nullptr`。
```cpp
void clearList(Node** head) {
if (*head == nullptr) {
return;
}
Node* current = *head;
while (current != nullptr) {
Node* temp = current;
current = current->next;
delete temp;
}
*head = nullptr;
}
```
6. **遍历 (Traversal)**: 使用循环或递归的方式打印链表的所有元素。
```cpp
void printList(Node* head) {
if (head == nullptr) {
return;
}
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
```
阅读全文