#include <iostream>
using namespace std;
struct ListNode{
int value_;
ListNode * next_;
};
void add_to_tail(ListNode**phead,int value){
ListNode *pnew = new ListNode();
pnew->value_ = value;
pnew->next_ = nullptr;
if(*phead == nullptr){
*phead = pnew;
}
else{
ListNode*probe = *phead;
while(probe->next_!=nullptr)
probe = probe->next_;
probe->next_ = pnew;
}
}
void traversal(ListNode *phead){
if(phead == nullptr){
cout<<"the list is empty"<<endl;
}
else{
ListNode *probe = phead;
while(probe!=nullptr){
cout<<probe->value_<<endl;
probe = probe->next_;
}
}
}
ListNode * reverse_list(ListNode **phead){
ListNode * probe=*phead;
ListNode *prec = nullptr;
ListNode * reverse_head;
while(probe != nullptr){
ListNode *next = probe->next_;
if(next == nullptr){
reverse_head = probe;
}
probe->next_=prec;
prec = probe;
probe = next;
}
return reverse_head;
}
int main() {
ListNode * head = nullptr;
add_to_tail(&head,1);
add_to_tail(&head,2);
add_to_tail(&head,3);
add_to_tail(&head,4);
traversal(head);
traversal(reverse_list(&head));
return 0;
}