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

来源:互联网 发布:淘宝助理如何在线发货 编辑:程序博客网 时间:2024/06/10 18:14

Problem Description
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。
Input
第一行输入整数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

#include<iostream>using namespace std;typedef struct LNode{    int number;    struct LNode *next;}LNode,*LinkList;void Output(LinkList &L);void Separate(LinkList &L);void CreateLink(LinkList &L,int number);//尾插法void CreateLink(LinkList &L,int number){    L = new LNode;    LinkList p;    L->next = NULL;    p = L;    while(number--){        LinkList s = new LNode;        cin>>s->number;        s->next = p->next;        p->next = s;        p = s;    }}//分离void Separate(LinkList &L){    LinkList L1,L2,p,pL1,pL2;    int k1 = 0,k2 = 0;    //建立两个带有头结点的空链表    L1 = new LNode;    L2 = new LNode;    L1->next = NULL;    L2->next = NULL;    pL1 = L1;    pL2 = L2;    p = L->next;    while(p){        if(p->number%2==0){            LinkList s1 = new LNode;            s1->number = p->number;            s1->next = pL1->next;            pL1->next = s1;            pL1 = s1;            ++k1;        }        else{            LinkList s2 = new LNode;            s2->number = p->number;            s2->next = pL2->next;            pL2->next = s2;            pL2 = s2;            ++k2;        }        p = p->next;    }    pL1->next = NULL;    pL2->next = NULL;    cout<<k1<<" "<<k2<<endl;    Output(L1);    Output(L2);}void Output(LinkList &L){    LinkList p = L->next;    while(p->next){        cout<<p->number<<" ";        p = p->next;    }    cout<<p->number;//最后一个数没有空格    cout<<endl;}int main(){    LinkList L;    int number;    cin>>number;    CreateLink(L,number);    Separate(L);    return 0;}
阅读全文
0 0
原创粉丝点击