数据结构实验之链表五:单链表的拆分
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
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;
}