用c++编程,从键盘输入任意的10个随机正整数,生成一个单链表,然后输出显示该单链表的每个结点的元素值。接着,依次访问单链表的每个元素,如果是奇数,将其删除;如果是偶数,就在其前面插入-1。
时间: 2024-09-12 18:11:19 浏览: 47
在C++中,你可以按照以下步骤创建一个链表并实现所需的功能:
1. 首先,你需要包含必要的头文件,并定义一个简单的链表节点结构体:
```cpp
#include <iostream>
#include <cstdlib> // 包含rand() 和 srand()
#include <ctime> // 设置随机数种子
struct Node {
int data;
Node* next;
};
```
2. 定义一个函数用于生成随机正整数:
```cpp
int getRandomInt(int lower, int upper) {
srand(time(0)); // 初始化随机数种子
return lower + rand() % (upper - lower + 1);
}
```
3. 创建链表并添加元素:
```cpp
void insertNode(Node*& head, const int value) {
if (!head) {
head = new Node{value, nullptr};
} else {
Node* newNode = new Node{value, head};
head = newNode;
}
}
void inputAndInsert(int count) {
Node* head = nullptr;
for (int i = 0; i < count; ++i) {
int value = getRandomInt(1, 100); // 输入范围可以调整
insertNode(head, value);
}
}
```
4. 输出原始链表:
```cpp
void printList(Node* head) {
while (head) {
std::cout << head->data << " -> ";
head = head->next;
}
std::cout << "NULL" << std::endl;
}
// 删除奇数节点并插入-1
void manipulateList(Node*& head) {
Node* prev = nullptr;
Node* current = head;
while (current) {
if (current->data % 2 != 0) { // 如果是奇数
if (prev) prev->next = current->next;
else head = current->next; // 处理头节点特殊情况
delete current;
} else {
prev = current;
if (prev->next && prev->next->data % 2 == 0) { // 如果前一个也是偶数,插入-1
Node* newNode = new Node{-1, prev->next};
prev->next = newNode;
}
}
current = current->next;
}
}
```
5. 主程序调用上述函数:
```cpp
int main() {
int numNodes = 10;
inputAndInsert(numNodes);
printList(head);
manipulateList(head);
printList(head);
return 0;
}
```
阅读全文