单链表将一个原有表按奇偶性分解到两个表中,写一个c语言版程序
时间: 2024-10-24 07:06:10 浏览: 19
单链表是一种动态数据结构,如果需要按照节点的奇偶性将其分解到两个单独的链表中,我们可以编写如下的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 将链表拆分成奇数链表和偶数链表
void splitList(Node* head, Node** oddHead, Node** evenHead) {
Node* odd = *oddHead = NULL;
Node* even = *evenHead = NULL;
Node* temp = head;
while (temp != NULL) {
if (temp->data % 2 == 0) { // 如果元素是偶数
Node* newNode = createNode(temp->data);
if (even != NULL) {
newNode->next = even;
} else {
*evenHead = newNode; // 链表开始时直接链接新的偶数节点
}
even = newNode;
} else { // 元素是奇数
Node* newNode = createNode(temp->data);
if (odd != NULL) {
newNode->next = odd;
} else {
*oddHead = newNode; // 链表开始时直接链接新的奇数节点
}
odd = newNode;
}
temp = temp->next;
}
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 假设我们有一个已经初始化好的链表
Node* inputList = /* ... */; // 你需要提供实际的链表头结点
Node* oddListHead = NULL;
Node* evenListHead = NULL;
splitList(inputList, &oddListHead, &evenListHead);
// 打印结果
printf("Odd list: \n");
printList(oddListHead);
printf("\nEven list: \n");
printList(evenListHead);
return 0;
}
```
这个程序首先创建了两个指针 `oddHead` 和 `evenHead` 来分别指向奇数链表和偶数链表的头部。然后遍历输入链表,根据节点值的奇偶性插入相应的链表。最后,打印出两个链表的内容。
请注意,此代码假设你已经有了一个已排序的单链表,并且链表包含整数值。如果你需要处理更复杂的链表或者其他类型的数据,相应地调整代码即可。同时,`inputList` 应该是一个有效的链表头结点。
阅读全文