1-8 建立一个 双向链表,并实现插入结点,删除结点的操作. 结点结构:struct noide { int data; node *right,*lrft;}并写出主函数
时间: 2024-10-08 20:24:54 浏览: 28
创建双向链表并实现插入和删除操作,首先我们需要定义`noide`节点结构体,然后实现链表的头指针以及插入和删除节点的方法。以下是一个简单的实现:
```cpp
#include <iostream>
// 定义节点结构体
struct Node {
int data;
Node* right;
Node* left;
};
// 创建链表头指针
Node* head = nullptr;
// 插入节点到链表尾部
void insertNode(int value) {
// 如果链表为空
if (head == nullptr) {
head = new Node();
head->data = value;
head->right = nullptr;
head->left = nullptr;
} else {
Node* current = head;
while (current->right != nullptr) {
current = current->right;
}
current->right = new Node();
current->right->data = value;
current->right->left = nullptr;
}
}
// 删除节点(假设要删除的数据已知)
void deleteNode(int value) {
if (head == nullptr) {
return;
}
// 遍历查找要删除的节点
Node* current = head;
Node* previous = nullptr;
while (current != nullptr && current->data != value) {
previous = current;
current = current->right;
}
// 如果找到节点,则进行删除
if (current != nullptr) {
if (previous == nullptr) {
// 删除头节点
head = current->right;
if (head != nullptr) {
head->left = nullptr;
}
} else {
// 删除非头节点
previous->right = current->right;
if (current->right != nullptr) {
current->right->left = previous;
}
}
delete current;
}
}
// 主函数演示如何使用这些操作
int main() {
// 初始化示例
insertNode(1);
insertNode(2);
insertNode(3);
std::cout << "Original list: ";
printList(head); // 自定义一个打印链表的函数
// 删除节点
deleteNode(2);
std::cout << "\nAfter deleting 2: ";
printList(head);
return 0;
}
// 打印链表函数(这里假设已定义)
void printList(Node* node) {
while (node != nullptr) {
std::cout << node->data << " ";
node = node->right;
}
std::cout << "\n";
}
```
这个示例实现了双向链表的基本操作,包括初始化、插入和删除节点。注意,这里的删除节点函数假定已经知道要删除的具体值,实际应用中可能需要用户提供值或辅助函数查找值。
阅读全文