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

来源:互联网 发布:淘宝上购买飞行燃料 编辑:程序博客网 时间:2024/06/08 10:54

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

#include <bits/stdc++.h>using namespace std;struct node{    int data;    node *next;};node *create(int n){    node *head,*tail,*p;    int i;    head=new(node);    head->next=NULL;    tail=head;    for(i=0; i<n; i++)    {        p=new(node);        scanf("%d",&p->data);        p->next=NULL;        tail->next=p;        tail=p;    }    return (head);}void dis(node *head){    node *q;    q=head->next;    while(q)    {        if(q->next==NULL)            printf("%d\n",q->data);        else            printf("%d ",q->data);        q=q->next;    }}int split(node *h){    node *h1,*h2,*tail1,*tail2,*p;    int num1=0,num2=0;    h1=new(node);    h1->next=NULL;    tail1=h1;    h2=new(node);    h2->next=NULL;    tail2=h2;    p=h->next;    while(p)    {        if(p->data%2==0)        {            tail1->next=p;            tail1=p;            num1++;        }        if(p->data%2!=0)        {            tail2->next=p;            tail2=p;            num2++;        }        p=p->next;    }    tail1->next=NULL;   //必须给结尾赋NULL,否则输出有问题    tail2->next=NULL;   //必须给结尾赋NULL</span>    printf("%d %d\n",num1,num2);    dis(h1);    dis(h2);    return 0;}int main(){    int n;    node *h;    scanf("%d",&n);    h=create(n);    split(h);    return 0;}

0 0
原创粉丝点击