タイトル1518:チェーンテーブルの反転

1242 ワード

入力:
入力には複数のテストサンプルが含まれ、入力はEOFで終了します.各テストケースについて、入力される第1の動作の整数n(0<=n<=1000):入力するチェーンテーブルの個数を表す.入力された2行目は、チェーンテーブル要素を表すn個の整数t(0<=t<=1000000)を含む.
出力:
各テストケースに対応して、チェーンテーブルの反転後の要素を出力し、要素がない場合はNULLを出力します.
サンプル入力:
5
1 2 3 4 5
0

サンプル出力:
5 4 3 2 1
NULL
#include <iostream>
using namespace std;
struct Node {
	int data;
	Node* next;

	Node(int data) {
		this->data = data;
		next = NULL;
	}

	Node() {
		this->data = 0;
		next = NULL;
	}
};
int main() {
	int n;
	while (cin >> n) {
		if (n <= 0) {
			cout << "NULL" << endl;
		} else {
			Node* head = new Node;
			cin >> head->data;
			Node* node = NULL;
			Node* p = head;
			for (int i = 1; i < n; i++) {
				node = new Node;
				cin >> node->data;
				p->next = node;
				p = node;
			}

			p = head;
			Node* post = NULL;
			Node* pre = NULL;

			while(p != NULL){
				post = p->next;
				p->next = pre;
				pre = p;
				p = post;

			}

//			p = pre;
			for(int i=0;i<n-1;i++){
				cout<<pre->data<<" ";
				pre = pre->next;
			}
			cout<<pre->data<<endl;
		}
	}
	return 0;
}