1-8 建立一个 双向链表,并实现插入结点,删除结点的操作. 结点结构:struct noide { int data; node *right,*lrft;}
时间: 2024-10-08 19:04:05 浏览: 21
创建一个双向链表并实现插入和删除操作涉及到链表的基本数据结构和指针操作。首先,我们需要定义一个`Node`结构体,包含了整型数据`data`以及指向下一个节点和前一个节点的指针。下面是相关的代码:
```cpp
// 定义 Node 结构体
struct Node {
int data;
Node* right; // 指向下个节点
Node* left; // 指向前一个节点
};
// 插入节点到链表末尾
void insertNode(Node** head, int data) {
// 创建新节点
Node* newNode = new Node();
if (*head == nullptr) {
// 如果链表为空,设置头和尾为新节点
*head = newNode;
newNode->left = nullptr;
newNode->right = nullptr;
} else {
// 非空链表,从尾部开始找插入位置
Node* current = *head;
while (current->right != nullptr) {
current = current->right;
}
// 将新节点连接到链表末尾
current->right = newNode;
newNode->left = current;
}
}
// 删除节点(假设我们想删除给定值的数据节点)
void deleteNode(Node** head, int key) {
if (*head == nullptr) {
return; // 链表为空,无法删除
}
Node* current = *head;
Node* prev = nullptr;
// 找到要删除的节点
while (current != nullptr && current->data != key) {
prev = current;
current = current->right;
}
if (current == nullptr) {
return; // 节点不存在于链表中
}
// 如果当前节点不是头节点
if (prev != nullptr) {
prev->right = current->right;
} else {
// 如果要删除的是头节点,更新头指针
*head = current->right;
}
// 如果当前节点有右节点,更新它的前一个节点指针
if (current->right != nullptr) {
current->right->left = current->left;
}
// 释放被删除节点的内存
delete current;
}
```