データ構造実験のチェーンテーブル5:単一チェーンテーブルの分割

2464 ワード

データ構造実験のチェーンテーブル5:単一チェーンテーブルの分割
Time Limit:1000 ms Memory limit:65536 K質問は?ここをクリック^^;
タイトルの説明
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>
typedef struct node
{
    int data;
    struct node *next;
}NODE;
int main()
{
    NODE *head, *tail, *q, *tail1, *head1, *head2, *tail2, *p;
    head = (NODE *)malloc(sizeof(NODE));
    head->next = NULL;
    tail = head;
    int n;
    scanf("%d", &n);
    int i;
    for(i = 0;i < n;i++){
        q = (NODE *)malloc(sizeof(NODE));
        q->next = NULL;
        scanf("%d", &q->data);
        tail->next = q;
        tail = q;
    }
    head1 = (NODE *)malloc(sizeof(NODE));
    head1->next = NULL;
    tail1 = head1;
    head2 = (NODE *)malloc(sizeof(NODE));
    head2->next = NULL;
    tail2 = head2;
    p = head->next;
    q = p->next;
    while(p != NULL){
        if(p->data%2 == 0){
            p->next = NULL;
            tail1->next = p;
            tail1 = p;
        }else {
            p->next = NULL;
            tail2->next = p;
            tail2 = p;
        }
        p = q;
        if(q != NULL){
            q = q->next;
        }
    }
    int cnt1 = 0;
    p = head1->next;
    while(p != NULL){
        cnt1++;
        p = p->next;
    }
    p = head2->next;
    int cnt2 = 0;
    while(p != NULL){
        cnt2++;
        p = p->next;
    }
    printf("%d %d
", cnt1, cnt2); p = head1->next; while(p != NULL){ if(p->next != NULL){ printf("%d ", p->data); }else { printf("%d
", p->data); } p = p->next; } p = head2->next; while(p != NULL){ if(p->next != NULL){ printf("%d ", p->data); }else { printf("%d
", p->data); } p = p->next; } return 0; }