Problem Description
Input
第二行依次输入N个整数。
Output
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。
Example Input
10
1 3 22 8 15 999 9 44 6 1001
Example Output
4 6 22 8 44 61 3 15 999 9 1001
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }*head,*tail,*tail1,*head1,*p,*q; struct node *create(int n) { int i; head=(struct node *)malloc(sizeof(struct node)); head->next=NULL; tail=head; for(i=1;i<=n;i++) { p=(struct node *)malloc(sizeof(struct node)); p->next=NULL; scanf("%d",&p->data); tail->next=p; tail=p; } return head; }; struct node *chai(struct node *head) { p=head->next; head->next=NULL; q=p->next; tail=head; head1=(struct node *)malloc(sizeof(struct node)); head1->next=NULL; tail1=head1; while(p) { if(p->data%2==0) { p->next=tail1->next; tail1->next=p; tail1=p; } else { p->next=tail->next; tail->next=p; tail=p; } p=q; if(q) q=q->next; } return head1; } void num(struct node *head) { int k=0; p=head->next; while(p) { k++; p=p->next; } printf("%d",k); } void print(struct node *head) { p=head->next; while(p) { if(p->next==NULL) printf("%d\n",p->data); else printf("%d ",p->data); p=p->next; } } int main() { int n; struct node *h,*y; scanf("%d",&n); h=create(n); y=chai(h); num(y); printf(" "); num(h); printf("\n"); print(y); print(h); }