编写程序,输入若干正整数,按从小到大次序建立1个带头结点单链表,设计一个实现单链表分离算法的Split函数,将原单链表中值为偶数的结点分离出来形成一个新单链表,新单链表中头结点重新申请,其余结点来自原链表,分离后,原链表中只剩非偶数值所在结点,最后显示2个单链表,在程序退出前销毁单链表。要求Split算法时间复杂性达到O(n),程序不可存在内存泄漏。 输入格式: 若干正整数。 输出格式: 每个单链表输出占一行,元素间用分隔符->分隔;初始单链表、剩余元素单链表、偶数元素单链表,共3行。
时间: 2024-03-12 13:48:50 浏览: 82
好的,我会尽力回答你的问题。这个问题涉及到链表的操作和算法,需要用到C语言来实现。以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *createList(int n); // 创建带头结点单链表
void destroyList(Node *head); // 销毁单链表
void printList(Node *head); // 输出单链表
void Split(Node *head, Node **oddHead); // 分离偶数元素
int main() {
int n;
printf("请输入正整数个数: ");
scanf("%d", &n);
Node *head = createList(n); // 创建带头结点单链表
Node *oddHead = NULL;
Split(head, &oddHead); // 分离偶数元素
printf("初始单链表: ");
printList(head);
printf("剩余元素单链表: ");
printList(head->next);
printf("偶数元素单链表: ");
printList(oddHead);
destroyList(head); // 销毁单链表
destroyList(oddHead);
return 0;
}
Node *createList(int n) {
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
Node *p = head;
for (int i = 0; i < n; i++) {
int data;
scanf("%d", &data);
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
p->next = node;
p = node;
}
return head;
}
void destroyList(Node *head) {
while (head != NULL) {
Node *p = head;
head = head->next;
free(p);
}
}
void printList(Node *head) {
while (head != NULL) {
printf("%d", head->data);
if (head->next != NULL) {
printf("->");
}
head = head->next;
}
printf("\n");
}
void Split(Node *head, Node **oddHead) {
Node *p = head->next;
Node *prev = head;
Node *oddPrev = NULL;
*oddHead = NULL;
while (p != NULL) {
if (p->data % 2 == 0) {
if (oddPrev == NULL) {
*oddHead = p;
} else {
oddPrev->next = p;
}
oddPrev = p;
prev->next = p->next;
p = p->next;
oddPrev->next = NULL;
} else {
prev = p;
p = p->next;
}
}
}
```
这个程序首先会读入一些正整数,然后创建一个带头结点的单链表,然后调用`Split`函数分离偶数元素,最后输出三个单链表:初始单链表、剩余元素单链表、偶数元素单链表。最后销毁两个单链表。
`Split`函数实现了单链表分离算法,时间复杂度为O(n),在遍历单链表的过程中,将偶数元素取出来,插入到另一个单链表中,并删除原单链表中的偶数元素。同时,使用`oddPrev`变量记录偶数元素单链表的尾结点,以便在插入新元素时,将其连接到单链表的末尾。
阅读全文
相关推荐



















