1-5删除整型数单向链表中所有奇数结点
时间: 2024-10-08 13:04:12 浏览: 35
单向链表结点的逐个删除-C语言教程
要删除单向链表中的所有奇数节点,你需要遍历链表并检查每个节点的值。如果节点值为奇数,则将其前驱节点设置为它的下一个节点,从而跳过这个奇数节点。以下是一个简单的 C++ 实现:
```cpp
#include <iostream>
// 定义链表节点结构
struct Node {
int data;
Node* next;
};
// 创建新节点的辅助函数
Node* createNode(int data) {
Node* newNode = new Node();
if (!newNode) {
std::cerr << "Memory allocation failed.\n";
return nullptr;
}
newNode->data = data;
newNode->next = nullptr;
return newNode;
}
// 删除奇数节点
void deleteOddNodes(Node** head) {
if (*head == nullptr) {
return; // 如果链表为空,直接返回
}
Node* current = *head;
Node* prev = nullptr;
while (current != nullptr) {
if (current->data % 2 != 0) { // 检查是否为奇数
if (prev == nullptr) { // 链表头是奇数
*head = current->next;
} else {
prev->next = current->next;
}
delete current; // 释放内存
} else {
prev = current; // 否则更新前驱节点
}
current = current->next;
}
}
// 打印链表
void printList(Node* node) {
while (node != nullptr) {
std::cout << node->data << " -> ";
node = node->next;
}
std::cout << "nullptr\n";
}
int main() {
// 假设你已经有了一个初始化好的链表,这里为了示例创建了一个包含奇数的链表
Node* head = createNode(1);
head->next = createNode(3); // 创建第二个节点
head->next->next = createNode(5); // 创建第三个节点(奇数)
head->next->next->next = createNode(7); // 创建第四个节点(奇数)
std::cout << "Original list:\n";
printList(head);
deleteOddNodes(&head);
std::cout << "List after deleting odd nodes:\n";
printList(head);
return 0;
}
```
在这个例子中,`deleteOddNodes` 函数接收链表头的指针,并使用 `prev` 变量跟踪当前节点的前驱。当找到奇数节点时,删除该节点并向前移动到下一个节点。
运行这个程序后,你会看到原始链表中有奇数节点被删除后的结果。
阅读全文