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('
');
}
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/n34F 著作权归作者所有。请勿转载和采集!