写c++代码:根据一个结点数据类型为整型的单链表生成两个单链表,使得第一个单链表中包含原单链表中所有数据值为奇数的结点,使得第二个单链表中包含原单链表中所有数据值为偶数的结点,原有单链表保持不变。
时间: 2024-10-04 11:02:57 浏览: 29
你可以通过创建一个新的结构体或者类来存储两个链表,并在遍历原始链表的过程中判断节点的值,然后分别将它们添加到对应的链表中。下面是一个简单的C++示例,假设我们已经有一个Node结构,它有一个int类型的value和指向下一个节点的指针next:
```cpp
#include <iostream>
using namespace std;
// 原始链表节点
struct Node {
int value;
Node* next;
};
// 新的链表节点,用于存储奇数和偶数节点
struct ListNode {
int value;
ListNode* next;
bool isOdd; // 标记是否为奇数节点
};
// 辅助函数,检查一个数字是否为奇数
bool isOdd(int num) {
return num % 2 != 0;
}
void splitList(Node* head) {
if (head == nullptr) {
return;
}
ListNode* oddHead = new ListNode(); // 奇数链表头
ListNode* evenHead = new ListNode(); // 偶数链表头
ListNode* current = head;
ListNode* oddCurrent = oddHead;
ListNode* evenCurrent = evenHead;
while (current != nullptr) {
if (isOdd(current->value)) {
oddCurrent->next = current;
oddCurrent = current;
} else {
evenCurrent->next = current;
evenCurrent = current;
}
current = current->next;
}
oddCurrent->next = nullptr;
evenCurrent->next = nullptr;
cout << "Original List:" << endl;
printList(head);
cout << "Odd List:" << endl;
printList(oddHead);
cout << "Even List:" << endl;
printList(evenHead);
}
// 打印链表
void printList(ListNode* node) {
while (node != nullptr) {
cout << node->value << " -> ";
node = node->next;
}
cout << "nullptr" << endl;
}
// 主程序入口
int main() {
// 初始化你的原始链表...
// ...
// 调用splitList函数分割链表
splitList(head);
return 0;
}
```
在这个代码中,`splitList`函数会创建两个新的链表(oddHead和evenHead),并根据节点值的奇偶性将其添加到相应的链表中。注意你需要自己实现`main`部分来初始化原始链表。
阅读全文