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

来源:互联网 发布:已备案域名转入阿里云 编辑:程序博客网 时间:2024/06/05 09:03

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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。

Input

第一行输入整数N;;
第二行依次输入N个整数。

Output

第一行分别输出偶数链表与奇数链表的元素个数; 
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。

Example Input

101 3 22 8 15 999 9 44 6 1001

Example Output

4 622 8 44 6 1 3 15 999 9 1001

Hint

不得使用数组!

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct str{    int data;    str *next;};str*creat(str*head,int n);int number(str*head,int n1);void ou(str*head,int n1);void ji(str*head,int n2);int main(){    int n,n1=0,n2=0;    cin>>n;    str*head;    head=new str;    head->next=NULL;    head=creat(head,n);    n1=number(head,n1);    n2=n-n1;    cout<<n1<<' '<<n2<<endl;    ou(head,n1);    ji(head,n2);    return 0;}str*creat(str*head,int n){    str *p,*tail;    p=head->next;tail=head;    for(int i=0;i<n;i++)    {        p=new str;        cin>>p->data;        tail->next=p;        p->next=NULL;        tail=p;    }    return head;}int number(str*head,int n1){    str*p;    p=head->next;    while(p!=NULL)    {        if(p->data%2==0)        {            n1++;        }        p=p->next;    }    return n1;}void ou(str*head,int n1){    str*p;    p=head->next;    while(p!=NULL)    {        if(p->data%2==0)        {            n1--;            if(n1==0)                cout<<p->data<<endl;            else                cout<<p->data<<' ';        }        p=p->next;    }}void ji(str*head,int n2){    str*p;    p=head->next;    while(p!=NULL)    {        if(p->data%2==1)        {            n2--;            if(n2==0)                cout<<p->data<<endl;            else                cout<<p->data<<' ';        }        p=p->next;    }}




阅读全文
0 0
原创粉丝点击