您的位置:首页 > 理论基础 > 数据结构算法

2120 数据结构实验之链表五:单链表的拆分

2017-09-29 15:18 302 查看

数据结构实验之链表五:单链表的拆分

Time Limit: 1000MS Memory Limit: 65536KB

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


Hint

不得使用数组! 
#include <bits/stdc++.h>
using namespace std;

typedef struct node
{
int date;
struct node *next;
}Lnode;

Lnode *creat(int n)  //建表 输入
{
Lnode *p,*q,*head;
head = new node;
head -> next = NULL;
q = head;
while(n--)
{
p = new node;
p -> next = NULL;
scanf("%d",&p->date);
q ->next = p;
q = p;
}
return head;
}

void output( Lnode *head)  //输出
{
Lnode *q;
q = head ->next;
cout << q ->date;
while(q->next)
{
cout << " " << q ->next ->date;
q = q ->next;
}
cout << endl;
}

void change(Lnode * head1)  //拆分
{
int x=0, y=0;
Lnode *head2, *p1, *p2, *q, *r;
head2 = new node;
head2 -> next = NULL;
q = head1->next;
p1 = head1;
p2 = head2;
while(q)
{
r = new node;
r ->date = q ->date;
r -> next = NULL;
if(r->date%2==0)
{
p1->next = r;
p1 = r;
q = q ->next;
x++;
}
else
{
p2->next = r;
p2 = r;
q = q ->next;
y++;
}
}
cout << x << " " << y << endl;
output(head1);
output(head2);
}

int main()
{
int n;
Lnode *head1;
cin >> n;
head1 = creat(n);
change(head1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: