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>
using namespace std;
typedef struct LNode{
int number;
struct LNode *next;
}LNode,*LinkList;
void Output(LinkList &L);
void Separate(LinkList &L);
void CreateLink(LinkList &L,int number);
//尾插法
void CreateLink(LinkList &L,int number){
L = new LNode;
LinkList p;
L->next = NULL;
p = L;
while(number--){
LinkList s = new LNode;
cin>>s->number;
s->next = p->next;
p->next = s;
p = s;
}
}
//分离
void Separate(LinkList &L){
LinkList L1,L2,p,pL1,pL2;
int k1 = 0,k2 = 0;
//建立两个带有头结点的空链表
L1 = new LNode;
L2 = new LNode;
L1->next = NULL;
L2->next = NULL;
pL1 = L1;
pL2 = L2;
p = L->next;
while(p){
if(p->number%2==0){
LinkList s1 = new LNode;
s1->number = p->number;
s1->next = pL1->next;
pL1->next = s1;
pL1 = s1;
++k1;
}
else{
LinkList s2 = new LNode;
s2->number = p->number;
s2->next = pL2->next;
pL2->next = s2;
pL2 = s2;
++k2;
}
p = p->next;
}
pL1->next = NULL;
pL2->next = NULL;
cout<<k1<<" "<<k2<<endl;
Output(L1);
Output(L2);
}
void Output(LinkList &L){
LinkList p = L->next;
while(p->next){
cout<<p->number<<" ";
p = p->next;
}
cout<<p->number;//最后一个数没有空格
cout<<endl;
}
int main(){
LinkList L;
int number;
cin>>number;
CreateLink(L,number);
Separate(L);
return 0;
}