冬休みの翌日--線形表--データ構造実験のチェーン表5:単鎖表の分割

2052 ワード

データ構造実験のチェーンテーブル5:単一チェーンテーブルの分割
Time Limit: 1000MS Memory limit: 65536K
タイトルの説明
N個の整数の順序を入力して、単一チェーンテーブルを作成し、この単一チェーンテーブルを2つのサブチェーンテーブルに分割し、第1のサブチェーンテーブルはすべての偶数を保存し、第2のサブチェーンテーブルはすべての奇数を保存した.2つのサブチェーンテーブルのデータの相対順序は、元のチェーンテーブルと一致します.
入力
1行目は整数Nを入力する.
2行目にN個の整数を順次入力します.
しゅつりょく
第1行は、偶数チェーンテーブルと奇数チェーンテーブルの要素個数をそれぞれ出力する.
2行目は偶数サブチェーンテーブルのすべてのデータを順次出力する.
3行目は奇数サブチェーンテーブルのすべてのデータを順次出力します.
サンプル入力
10
1 3 22 8 15 999 9 44 6 1001

サンプル出力
4 6
22 8 44 6 
1 3 15 999 9 1001

ヒント
配列は使用できません!
ソース
 
サンプルプログラム
#include <stdio.h>
#include <stdlib.h>
struct node{
    int data;
    node *next;
};
int main()
{
    int i , n , count = 0;
    node *head1 = NULL, *p = NULL, *q = NULL , *head2 = NULL;
    scanf("%d", &n);
    head1 = new node;
    head1 ->next = NULL;
    q = head1;
    for(i =1 ; i <= n ; i++)
    {
        p = new node;
        scanf("%d", &p->data);
        q->next = p ;
        q = p ;
    }
    head2 = new node;
    head2->next = NULL;
    q = head1 ; p = head2;
    for(i = 1 ; i <= n ; i++)
    {
        if( (q->next->data)%2==0)
        {
            node *r ;
            r = q->next ;
            p->next = r ;
            p = r ;
            q->next = r->next ;
            count++;
        }
        else
            q = q->next;
    }
    printf("%d %d
", count, n-count); q = head2->next ; for(i = 1 ; i <= count ; i++) { printf("%d", q->data); if(i < count) printf(" "); else printf("
"); q = q->next; } p = head1->next ; for(i = 1 ; i <= (n-count) ; i++) { printf("%d", p->data); if(i <(n-count) ) printf(" "); else printf("
"); p = p->next; } return 0; }