C语言链表分割:将奇偶节点分离成两个链表
该代码的输入格式为: 第一行:一个整数n,表示链表节点的个数。 接下来n行:每行一个整数,表示链表节点的值。
该代码的输出格式为: 一行: 'Even list: ',后面跟着按顺序输出所有偶数节点的值,用空格隔开。 一行: 'Odd list: ',后面跟着按顺序输出所有奇数节点的值,用空格隔开。
#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/n346 著作权归作者所有。请勿转载和采集!