Think:
本题原可用 链表模板 来解题, 本篇blog 采用的方法 是模拟栈 进行解题
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<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f
int n, m, temp;
//定义顺序表
typedef int Elemtype;
typedef struct
{
Elemtype *elem;
int length;
int listsize;
} sqlist;
void mal(sqlist &L)
{
L.elem = (Elemtype *)malloc(INF * sizeof(Elemtype));
L.length = 0;
}
void input(sqlist &L,int len)
{
L.listsize = len;
int i;
for(i = temp; i < len; i++)
{
cin >> L.elem[L.length ++];
// judge(L,L.elem[L.length],L.length);
}
}
void Deletelist(sqlist &total, sqlist &head1, sqlist &head2)
{
int i;
for (i = 0; i <= total.length - 1; i ++)
{
if (total.elem[i] % 2 == 0)
head1.elem[head1.length ++] = total.elem[i];
else
head2.elem[head2.length ++] = total.elem[i];
}
}
//输出函数
void output(sqlist &L)
{
int i;
for(i = 0; i <= L.length - 1; i++)
{
if (i == L.length - 1)
cout << L.elem[i] << endl;
else
cout << L.elem[i] << " ";
}
}
int main()
{
int n;
while(cin >> n)
{
sqlist total, head1, head2;
mal(total);
mal(head1);
mal(head2);
input(total, n);
Deletelist(total, head1, head2);
cout << head1.length << " " << head2.length << endl;
output(head1);
output(head2);
}
}