#include<vector>
using namespace std;

struct ListNode{
	int val;
	ListNode* next;
	ListNode(int x) : val(x), next(NULL){}
};


ListNode* reverse(ListNode* head) {
	ListNode* pre = NULL;
	ListNode* cur = head;
	while (cur) {
		ListNode* t = cur->next;
		cur->next = pre;
		pre = cur;
		cur = t;
	}
	return pre;
}



int main() {
	ListNode* h1 = new ListNode(1);
	ListNode* h2 = new ListNode(2);
	ListNode* h3 = new ListNode(3);
	ListNode* h4 = new ListNode(4);
	ListNode* h5 = new ListNode(5);

	h1->next = h2;
	h2->next = h3;
	h3->next = h4;
	h4->next = h5;
	h5->next = NULL;

	ListNode* res = reverse(h1);
	while (res) {
		cout << res->val;
		res = res->next;
	}

	return 0;
}