用c原因完成一段代码要求有输入和输出将一个结点值为自然数的单链表拆分为两个单链表原表中保留值为偶数的结点而值为奇数的结点按他们在原表中的相对次序组成一个新链表要求代码尽量简洁
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *splitList(Node *head, Node **oddHead) {
Node *evenHead = NULL;
Node *cur = head, *prev = NULL;
while (cur != NULL) {
if (cur->data % 2 == 0) {
if (evenHead == NULL) {
evenHead = cur;
} else {
prev->next = cur;
}
prev = cur;
} else {
if (*oddHead == NULL) {
*oddHead = cur;
} else {
Node *oddCur = *oddHead;
while (oddCur->next != NULL) {
oddCur = oddCur->next;
}
oddCur->next = cur;
}
}
cur = cur->next;
}
if (prev != NULL) {
prev->next = NULL;
}
return evenHead;
}
void printList(Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
Node *oddHead = NULL;
int n, x;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
Node *node = (Node *) malloc(sizeof(Node));
node->data = x;
node->next = head;
head = node;
}
Node *evenHead = splitList(head, &oddHead);
printf("Even list: ");
printList(evenHead);
printf("Odd list: ");
printList(oddHead);
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/fbmG 著作权归作者所有。请勿转载和采集!