1511:末尾からチェーンテーブルを印刷@jobdu

1996 ワード

タイトル1511:末尾からチェーンテーブルを印刷
時間制限:1秒
メモリ制限:128メガ
特殊問題:いいえ
コミット:1311
解決策:440
タイトルの説明:
チェーンテーブルを入力し、チェーンテーブルの各ノードの値を末尾から印刷します.
入力:
各入力ファイルには、テストサンプルのセットのみが含まれます.各テストケースのセットには、チェーンテーブルのノードを表す0より大きい整数の複数の行が含まれます.最初の行はチェーンテーブルの最初のノードの値で、順番に類推されます.-1に入力すると、チェーンテーブルの入力が完了します.-1自体はチェーンテーブルに属していません.
出力:
各テストケースに対応して、チェーンテーブルの各ノードの値を末尾から順に出力し、各値が1行を占める.
サンプル入力:
1
2
3
4
5
-1

サンプル出力:
5
4
3
2
1

再帰的にやると最後のテストのセットに通じないことが分かったので、Stackを使いました.
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;



public class S5 {

	public static void main(String[] args) throws FileNotFoundException {
		BufferedInputStream in = new BufferedInputStream(new FileInputStream("S5.in"));
        System.setIn(in);
		Scanner cin = new Scanner(System.in);
		ListNode head = null;
		ListNode tail = null;
		Stack<Integer> stack = new Stack<Integer>();
		
		while (cin.hasNextInt()) {
			int input = cin.nextInt();
			if(input == -1){
				break;
			}
			if(head == null){
				head = new ListNode(input);
				tail = head;
			}else{
				tail.next = new ListNode(input);
				tail = tail.next;
			}
			stack.add(input);
		}
		
//		printout(head);
//		reverseLinkedList(head);
		reverseLinkedListStack(stack);
	}
	
	public static void reverseLinkedList(ListNode head){
		if(head == null){
			return;
		}
		reverseLinkedList(head.next);
		System.out.println(head.val);
	}
	
	public static void reverseLinkedListStack(Stack stack){
		while(!stack.isEmpty()){
			System.out.println(stack.pop());
		}
	}
	
	public static void printout(ListNode head){
		while(head != null){
			System.out.println(head.val);
			head = head.next;
		}
	}
	
	public static class ListNode {
		public int val;
		public ListNode next;

		public ListNode(int x) {
			val = x;
			next = null;
		}
	}
	
}