用c++完整编写一个程序从键盘输入任意的10个随机正整数,生成一个单链表,然后输出显示该单链表的每个结点的元素值。接着,依次访问单链表的每个元素,如果是奇数,将其删除;如果是偶数,就在其前面插入-1。
时间: 2024-09-12 21:12:43 浏览: 90
在C++中,你可以使用`std::list`作为动态数组,因为它的插入和删除操作效率高,适合实现这样的需求。下面是一个完整的示例程序:
```cpp
#include <iostream>
#include <list>
#include <cstdlib> // 需要包含random库
#include <ctime> // 需要包含ctime库
// 定义节点结构体
struct ListNode {
int value;
ListNode* next;
};
ListNode* createLinkedList(int size) {
std::list<int> numbers;
for (int i = 0; i < size; ++i) {
srand(time(0)); // 初始化随机数种子
int random_num = rand() % 100 + 1; // 生成1到100之间的随机整数
numbers.push_back(random_num);
std::cout << "Adding: " << random_num << std::endl;
}
ListNode* head = nullptr;
ListNode* tail = nullptr;
for (const auto& num : numbers) {
ListNode temp{num, nullptr};
if (!head) {
head = &temp;
tail = &temp;
} else {
tail->next = &temp;
tail = &temp;
}
}
return head;
}
void displayList(ListNode* head) {
ListNode* current = head;
while (current != nullptr) {
std::cout << "Value: " << current->value << std::endl;
current = current->next;
}
}
void processList(ListNode*& head) {
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr) {
if (current->value % 2 == 0) { // 如果是偶数,在它前面插入-1
ListNode* temp = new ListNode{-1, current};
if (prev)
prev->next = temp;
else
head = temp;
prev = temp;
} else { // 删除奇数节点
if (prev)
prev->next = current->next;
else
head = current->next;
delete current;
}
current = current->next;
}
}
int main() {
const int listSize = 10;
ListNode* list = createLinkedList(listSize);
std::cout << "Original List:" << std::endl;
displayList(list);
processList(list);
std::cout << "Processed List:" << std::endl;
displayList(list);
return 0;
}
```
这个程序首先创建一个包含10个随机整数的链表,然后处理链表,将偶数前插入-1,奇数节点删除。最后输出处理后的链表。
阅读全文