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

来源:互联网 发布:清华 知乎 编辑:程序博客网 时间:2024/05/19 07:11

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

Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic Discuss

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<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;struct node{int data;struct node *next;};int main(){int n,num1=0,num2=0;struct node *head,*p,*q,*head1,*head2,*p1,*p2;head  =  (struct node*)malloc(sizeof(struct node));head1 = (struct node*)malloc(sizeof(struct node));head2 = (struct node*)malloc(sizeof(struct node));head->next=NULL;head1->next=NULL;head2->next=NULL;scanf("%d",&n);for(int i=0;i<n;i++){p=(struct node*)malloc(sizeof(struct node));scanf("%d",&p->data);p->next=head->next;head->next=p;}p=head->next;while(p){if(p->data %2 ==0){p1=(struct node*)malloc(sizeof (struct node));p1->data = p->data;     p1->next = head1->next;head1->next=p1;num1++;}else{p2=(struct node*)malloc(sizeof (struct node));p2->data = p->data;     p2->next = head2->next;head2->next=p2;num2++;}cout<<p->data<<" ";p=p->next;}cout<<endl;cout<<num1<<" "<<num2<<endl;p=head1->next;while(p){if(p->next!=NULL)cout<<p->data<<" ";elsecout<<p->data<<endl;p=p->next;}p=head2->next;while(p){if(p->next!=NULL)cout<<p->data<<" ";elsecout<<p->data<<endl;p=p->next;}return 0;} 
我用的是头插法建表,然后偶数链表和奇数链表同样采用头插法建表。

原创粉丝点击