-
题目描述
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。输入
第一行输入整数N;;
第二行依次输入N个整数。输出
第一行分别输出偶数链表与奇数链表的元素个数;
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。示例输入
10 1 3 22 8 15 999 9 44 6 1001
示例输出
4 6 22 8 44 6 1 3 15 999 9 1001
- #include<stdio.h>
- #include<stdlib.h>
- struct node
- {
- int date;
- struct node *next;
- };
- struct node *p,*q,*head1=NULL,*head2,*tail1,*tail2;
- int main()
- {
- int m,n,s;
- n=0;s=0;
- scanf("%d",&m);
- head2=(struct node*)malloc(sizeof(struct node));
- head1=(struct node*)malloc(sizeof(struct node));
- q=head1;
- while(m--)
- {
- if((p=(struct node*)malloc(sizeof(struct node)*1))==NULL)
- return 0;
- scanf("%d",&p->date);
- p->next=NULL;
- q->next=p;
- q=q->next;
- }
- head2->next=NULL;
- tail1=head1;
- tail2=head2;
- p=head1->next;
- q=p->next;
- head1->next=NULL;
- while(p!=NULL)
- {
- if(p->date%2==0)
- {
- p->next=NULL;
- tail1->next=p;
- tail1=p;
- n++;
- }
- else
- {
- p->next=NULL;
- tail2->next=p;
- tail2=p;
- s++;
- }
- p=q;
- if(q!=NULL)
- q=q->next;
- }
- printf("%d %d\n",n,s);
- q=head1->next;
- while(q!=NULL)
- {
- printf("%d",q->date);
- if(q->next!=NULL)
- printf(" ");
- q=q->next;
- }
- printf("\n");
- p=head2->next;
- while(p!=NULL)
- {
- printf("%d",p->date);
- if(p->next!=NULL)
- printf(" ");
- p=p->next;
- }
- return 0;
- }
数据结构实验之链表五:单链表的拆分
最新推荐文章于 2025-02-17 23:32:10 发布