用c原因完成一段代码要求有输入和输出将一个结点值为自然数的单链表拆分为两个单链表原表中保留值为偶数的结点而值为奇数的结点按他们在原表中的相对次序组成一个新链表其中定义函数的名称以单个字母命名
以下是使用C语言编写的代码,实现了将一个结点值为自然数的单链表拆分为两个单链表,原表中保留值为偶数的结点,而值为奇数的结点按他们在原表中的相对次序组成一个新链表。函数名称为“s”。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
void s(struct node **head1, struct node **head2, struct node **head3) {
struct node *p = *head1;
struct node *p1 = NULL, *p2 = NULL, *p3 = NULL;
while (p != NULL) {
if (p->data % 2 == 0) {
if (p2 == NULL) {
*head2 = p;
p2 = p;
} else {
p2->next = p;
p2 = p;
}
} else {
if (p3 == NULL) {
*head3 = p;
p3 = p;
p1 = p;
} else {
p3->next = p;
p3 = p;
}
}
p = p->next;
}
if (p2 != NULL) {
p2->next = NULL;
}
if (p3 != NULL) {
p3->next = NULL;
}
*head1 = NULL;
*head1 = p1;
}
int main() {
struct node *head = NULL, *tail = NULL;
int n, i, x;
printf("请输入链表长度:");
scanf("%d", &n);
printf("请输入链表中的数据:");
for (i = 0; i < n; i++) {
scanf("%d", &x);
struct node *p = (struct node*)malloc(sizeof(struct node));
p->data = x;
p->next = NULL;
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
}
struct node *head2 = NULL, *head3 = NULL;
s(&head, &head2, &head3);
printf("偶数链表:");
struct node *p = head2;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n奇数链表:");
p = head3;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
输入格式:
- 链表长度
- 链表中的数据
输出格式:
- 偶数链表
- 奇数链表
例如,输入:
6
1 2 3 4 5 6
输出:
偶数链表:2 4 6
奇数链表:1 3 5
``
原文地址: http://www.cveoy.top/t/topic/fbmz 著作权归作者所有。请勿转载和采集!