用devC实现一下程序:有一个由整数元素构成的非空单链表A,设计一个算法,将其拆分成两个单链表A和B,使得A单链表中含有所有为偶数的节点,B单链表中含有所有为奇数的节点,且保持原来的相对次序。
时间: 2024-11-25 18:11:46 浏览: 8
在C++中,我们可以使用迭代的方式来实现这个功能,因为我们无法直接通过指针操作将链表分为两部分。以下是使用dev-C++实现的一个简单示例:
```cpp
#include <iostream>
// 定义链表结构
struct Node {
int data;
Node* next;
};
// 创建新节点
Node* newNode(int data) {
Node* newNode = new Node();
if (newNode == nullptr) {
std::cerr << "Memory allocation failed\n";
return nullptr;
}
newNode->data = data;
newNode->next = nullptr;
return newNode;
}
// 功能函数:将链表拆分成奇偶链表
void splitList(Node** head, Node** oddHead, Node** evenHead) {
*oddHead = nullptr;
*evenHead = nullptr;
Node* current = *head;
while (current != nullptr) {
// 判断当前节点是否为奇数
bool isOdd = current->data % 2 != 0;
if (isOdd && *oddHead == nullptr) {
*oddHead = current;
} else if (!isOdd && *evenHead == nullptr) {
*evenHead = current;
}
// 将指针移动到下一个节点
current = current->next;
}
}
int main() {
// 假设你已经有了一个非空的单链表A,并已传入链表头指针head
Node* head = ...; // 实际上需要你自己构建或初始化这个链表
Node* oddHead, *evenHead;
splitList(&head, &oddHead, &evenHead);
// 现在你可以分别遍历两个链表打印结果
printLinkedList(oddHead);
printLinkedList(evenHead);
return 0;
}
// 辅助函数,用于打印链表
void printLinkedList(Node* head) {
while (head != nullptr) {
std::cout << head->data << " ";
head = head->next;
}
std::cout << "\n";
}
```
在这个例子中,`splitList` 函数会遍历链表并根据节点值的奇偶性将其分到相应的链表。注意,你需要提供一个已经建立好的链表头部作为输入。
阅读全文