试编写算法,按照输入数据建立带头结点的单向链表,在单向链表中删除所有的偶数元素结点,并输出删除后的新的单链表。
时间: 2024-10-03 17:03:17 浏览: 48
要实现这个算法,可以按照以下步骤编写:
1. 定义一个链表节点结构体,包含整数值 `val` 和指向下一个节点的指针 `next`。
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
```
2. 创建一个函数 `removeEvenNumbers`,接受一个链表头节点作为参数。
```cpp
ListNode* removeEvenNumbers(ListNode* head) {
// 如果链表为空或者只有一个元素,直接返回
if (head == NULL || head->next == NULL) {
return head;
}
ListNode* current = head;
ListNode* prev = NULL;
while (current != NULL) {
// 检查当前节点是否为偶数
if (current->val % 2 == 0) {
// 如果是偶数,更新前一个节点的next指向前一个节点
if (prev != NULL) {
prev->next = current->next;
} else { // 如果是头节点,需要特殊处理
head = current->next;
}
// 释放当前节点
delete current;
} else {
// 非偶数节点,继续遍历
prev = current;
current = current->next;
}
}
return head;
}
```
3. 调用函数并打印结果(假设有一个 `main` 函数用于测试)
```cpp
int main() {
// 初始化链表示例...
ListNode* list = ...;
list = removeEvenNumbers(list);
// 输出删除偶数元素后的链表
printLinkedList(list); // 自定义函数,将链表打印出来
return 0;
}
```
阅读全文