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

来源:互联网 发布:软件测试职位描述 编辑:程序博客网 时间:2024/06/07 06:02

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

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

#include <bits/stdc++.h>using namespace std;struct node{    int data;    node *next;};struct node *creat(int n){    node *head, *tail, *p;    head = new node;    head->next = NULL;    tail = head;    for(int i = 0; i < n; i++)    {        p = new node;        cin >> p->data;        p->next = NULL;        tail->next = p;        tail = p;    }    return head;}int s=0;struct node* split1(node *head){    node *p, *tail3, *tail2, *q, *head2, *head3;    head2 = new node;    head3 = new node;    head2->next = NULL;    head3->next = NULL;    tail2 = head2;    tail3 = head3;    p = head->next;    q = p->next;    while(p)    {        if(p->data%2 == 0)        {            s++;            p->next = NULL;            tail2->next = p;            tail2 = p;        }        else        {            p->next = NULL;            tail3->next = p;            tail3 = p;        }        p = q;        if(q)            q = q->next;    }    return head2;}int g=0;struct node* split2(node *head){    node *p, *tail3, *tail2, *q, *head2, *head3;    head2 = new node;    head3 = new node;    head2->next = NULL;    head3->next = NULL;    tail2 = head2;    tail3 = head3;    p = head->next;    q = p->next;    while(p)    {        if(p->data%2 == 0)        {            p->next = NULL;            tail2->next = p;            tail2 = p;        }        else        {            g++;            p->next = NULL;            tail3->next = p;            tail3 = p;        }        p = q;        if(q)            q = q->next;    }    return head3;}void display(node *head){    node *p;    for(p = head->next; p; p=p->next)    {        if(p->next)        cout << p->data << " ";        else            cout << p->data << endl;    }}int main(){    int n;    struct node *head, *head1, *head2;    cin >> n;    head = creat(n);    head1 = split1(head);    head2 = split2(head);    cout << s << " " << g << endl;    display(head1);    display(head2);    return 0;}


0 0
原创粉丝点击