链表五:单链表的拆分
Time Limit: 1000MS
Memory Limit: 65536KB
Submit
Statistic
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<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node*next;
};
int main()
{
int n ,a = 0,b = 0;
struct node*head1,*head2,*p,*head,*q,*tail,*tail1,*tail2,*t;
head = (struct node*)malloc(sizeof(struct node));
head->next = NULL;
tail = head;
scanf("%d",&n);
while(n--)
{
p = (struct node*)malloc(sizeof(struct node));
p->next = NULL;
scanf("%d",&p->data);
tail->next = p;
tail = p;
}
head1 = (struct node*)malloc(sizeof(struct node));
head1->next = NULL;
tail1 = head1;
head2 = (struct node*)malloc(sizeof(struct node));
head2->next = NULL;
tail2 = head2;
q = head->next;
while(q!=NULL)
{
t = (struct node*)malloc(sizeof(struct node));
t->next = NULL;
t->data = q->data;
if((t->data)%2==0)
{
tail1->next =t;
tail1 = t;
a++;
}
else
{
tail2->next = t;
tail2 = t;
b++;
}
q = q->next;
}
printf("%d %d\n",a,b);
p = head1->next;
while(p)
{
if(p->next)
printf("%d ",p->data);
else printf("%d\n",p->data);
p = p->next;
}
p = head2->next;
while(p)
{
if(p->next)
printf("%d ",p->data);
else printf("%d\n",p->data);
p = p->next;
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-17933.html