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

来源:互联网 发布:win10数据保护怎么关闭 编辑:程序博客网 时间:2024/06/07 02:46

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

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

输入

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

输出

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

示例输入

101 3 22 8 15 999 9 44 6 1001

示例输出

4 622 8 44 6 1 3 15 999 9 1001

提示

不得使用数组!

#include<stdio.h>#include<iostream>using namespace std;struct node{    int  d;    node *next;};node *CreatList(int n)      //顺序建表{    node *head=new node;    head->next=NULL;    node *tail=head;    for(int i=0;i<n;i++)    {        node *p=new node ;        cin>>p->d;        tail->next=p;        tail=p;    }    tail->next=NULL;    return head;}void PrintList(node *head)      //输出链表{    node *p=head->next;    while(p!=NULL)    {        if(p->next==NULL)            cout<<p->d<<endl;        else            cout<<p->d<<" ";        p=p->next;    }}node *SplitList(node *h1)       //拆分链表{    int n=0,m=0;    node *h2=new node;    h2->next=NULL;    node *p=h1->next;    h1->next=NULL;    node *tail2=h2;    node *tail1=h1;    while(p!=NULL)    {        if(p->d%2)            {                tail1->next=p;                tail1=p;                n++;            }        else            {                tail2->next=p;                tail2=p;                m++;            }        p=p->next;    }    tail1->next=NULL;<span style="white-space:pre"></span>//注意别忘了    tail2->next=NULL;    cout<<m<<" "<<n<<endl;    PrintList(h2);    PrintList(h1);}int main(){    int n;    cin>>n;    node *head=NULL;    head=CreatList(n);    SplitList(head);    return 0;}


0 0
原创粉丝点击