「剣指Offer」面接問題-チェーンテーブルを最初から最後まで印刷

1839 ワード

タイトルの説明:
チェーンテーブルを入力し、チェーンテーブルの各ノードの値を末尾から印刷します.
 
入力:
各入力ファイルには、テストサンプルのセットのみが含まれます.各テストケースのセットには、チェーンテーブルのノードを表す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; }