单链表的拆分
Problem Description 输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。 Input 第一行输入整数N;; 第二行依次输入N个整数。 Output 第一行分别输出偶数链表与奇数链表的元素个数; 第二行依次输出偶数子链表的所有数据; 第三行依次输出奇数子链表的所有数据。 Example Input 10 1 3 22 8 15 999 9 44 6 1001 Example Output 4 6 22 8 44 6 1 3 15 999 9 1001 #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; struct node { int data; struct node *next; }*head1,*head2; int m,k;//m记录偶数的个数,k记录奇数的个数 struct node *creat(int n) { m=0; k=0; int i; struct node *t,*p,*q; head1=(struct node *)malloc(sizeof(struct node)); head2=(struct node *)malloc(sizeof(struct node)); head1->next=NULL; head2->next=NULL; t=head1; q=head2; for(i=0;i<n;i++) { p=(struct node *)malloc(sizeof(struct node)); scanf("%d",&p->data); if(p->data%2==0) { p->next=NULL; t->next=p; t=t->next; m++; } else { p->next=NULL; q->next=p; q=q->next; k++; } } return head1; }; void show(struct node *head) { struct node *p; 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; scanf("%d",&n); creat(n); printf("%d %d\n",m,k); show(head1); show(head2); return 0; }