数据结构实验之链表五:单链表的拆分
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。
Input
第一行输入整数N;;
第二行依次输入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 date;
struct node * next;
};
int main()
{
int n, i, k = 0, t = 0;
struct node *head1, *head2, *p, *q, *tail, *r, *s;
scanf("%d", &n);
head1 = (struct node *)malloc(sizeof(struct node));
head1 -> next = NULL;
tail = head1;
for(i = 1; i <= n; i++)
{
p = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p -> date);
p -> next = NULL;
tail -> next = p;
tail = p;
}
head2 = (struct node *)malloc(sizeof(struct node));
head2 -> next = NULL;
p = head1 -> next;
head1 -> next = NULL;
q = p -> next;
r = head1;
s = head2;
while(p != NULL)
{
if((p -> date) % 2 == 0)
{
p -> next = NULL;
r -> next = p;
r = p;
k++;
}
else
{
p -> next = NULL;
s -> next = p;
s = p;
t++;
}
p = q;
if(q != NULL)
{
q = q -> next;
}
}
p = head1 -> next;
q = head2 -> next;
printf("%d %d\n", k, t);
for(p = head1 -> next; p != NULL;p = p -> next)
{
if(p == head1 -> next)
{
printf("%d", p -> date);
}
else
{
printf(" %d", p -> date);
}
}
printf("\n");
while(q)
{
if(q == head2 -> next)
{
printf("%d", q -> date);
}
else
{
printf(" %d", q -> date);
}
q = q -> next;
}
printf("\n");
return 0;
}
/***************************************************
User name: jk170704***
Result: Accepted
Take time: 0ms
Take Memory: 152KB
Submit time: 2018-01-19 19:50:30
****************************************************/
#include<stdio.h>
#include<stdlib.h>
struct node
{
int date;
struct node * next;
};
int main()
{
int n, i, k = 0, t = 0;
struct node *head1, *head2, *p, *q, *tail, *r, *s;
scanf("%d", &n);
head1 = (struct node *)malloc(sizeof(struct node));
head1 -> next = NULL;
tail = head1;
for(i = 1; i <= n; i++)
{
p = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p -> date);
p -> next = NULL;
tail -> next = p;
tail = p;
}
head2 = (struct node *)malloc(sizeof(struct node));
head2 -> next = NULL;
p = head1 -> next;
head1 -> next = NULL;
q = p -> next;
r = head1;
s = head2;
while(p != NULL)
{
if((p -> date) % 2 == 0)
{
p -> next = NULL;
r -> next = p;
r = p;
k++;
}
else
{
p -> next = NULL;
s -> next = p;
s = p;
t++;
}
p = q;
if(q != NULL)
{
q = q -> next;
}
}
p = head1 -> next;
q = head2 -> next;
printf("%d %d\n", k, t);
for(p = head1 -> next; p != NULL;p = p -> next)
{
if(p == head1 -> next)
{
printf("%d", p -> date);
}
else
{
printf(" %d", p -> date);
}
}
printf("\n");
while(q)
{
if(q == head2 -> next)
{
printf("%d", q -> date);
}
else
{
printf(" %d", q -> date);
}
q = q -> next;
}
printf("\n");
return 0;
}
/***************************************************
User name: jk170704***
Result: Accepted
Take time: 0ms
Take Memory: 152KB
Submit time: 2018-01-19 19:50:30
****************************************************/