「剣指Offer」面接問題-チェーンテーブルを最初から最後まで印刷
1839 ワード
タイトルの説明:
チェーンテーブルを入力し、チェーンテーブルの各ノードの値を末尾から印刷します.
入力:
各入力ファイルには、テストサンプルのセットのみが含まれます.各テストケースのセットには、チェーンテーブルのノードを表す0より大きい整数の複数の行が含まれます.最初の行はチェーンテーブルの最初のノードの値で、順番に類推されます.-1に入力すると、チェーンテーブルの入力が完了します.-1自体はチェーンテーブルに属していません.
出力:
各テストケースに対応して、チェーンテーブルの各ノードの値を末尾から順に出力し、各値が1行を占める.
サンプル入力:
サンプル出力:
コード(一)ダブルチェーンテーブル出力:
コード(二)単一チェーンテーブルの再帰出力:
チェーンテーブルを入力し、チェーンテーブルの各ノードの値を末尾から印刷します.
入力:
各入力ファイルには、テストサンプルのセットのみが含まれます.各テストケースのセットには、チェーンテーブルのノードを表す0より大きい整数の複数の行が含まれます.最初の行はチェーンテーブルの最初のノードの値で、順番に類推されます.-1に入力すると、チェーンテーブルの入力が完了します.-1自体はチェーンテーブルに属していません.
出力:
各テストケースに対応して、チェーンテーブルの各ノードの値を末尾から順に出力し、各値が1行を占める.
サンプル入力:
1
2
3
4
5
-1
サンプル出力:
5
4
3
2
1
コード(一)ダブルチェーンテーブル出力:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
typedef struct node{
int data;
link pre;
link next;
}Node;
void print(link p){
while(p->pre){
printf("%d
", p->data);
p = p->pre;
}
}
int main(int argc, char const *argv[])
{
int data;
link L = malloc(sizeof(Node));
L->pre = L->next = 0;
L->data = -1;
link p = L;
for(; ;){
scanf("%d", &data);
if(data == -1) break;
link y = malloc(sizeof(Node));
y->data = data;
y->next = p->next;
p->next = y;
y->pre = p;
p = y;
}
print(p);
return 0;
}
コード(二)単一チェーンテーブルの再帰出力:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
typedef struct node{
int data;
link next;
}Node;
void print(link p){
if(!p) return;
if(p){
print(p->next);
}
printf("%d
", p->data);
}
int main(int argc, char const *argv[])
{
int data;
link L = malloc(sizeof(Node));
L->next = 0;
link p = L;
for(; ;){
scanf("%d", &data);
if(data == -1) break;
link y = malloc(sizeof(Node));
y->data = data;
y->next = p->next;
p->next = y;
p = y;
}
print(L->next);
return 0;
}