#include<iostream>
using namespace std;
class node{
public:
int data;
node *next;
//constructor
node(int d){
data=d;
next=NULL;
}
};
void insertAtTail(node *&head, int data){
if(head==NULL){
head=new node(data);
return;
}
node *tail=head;
while(tail->next!=NULL){
tail=tail->next;
}
tail->next=new node(data);
return;
}
void buildInput(node *&head){
int data;
cin>>data;
while(data!=-1){
insertAtTail(head,data);
cin>>data;
}
}
void reverseIterative(node *&head){
node * curr=head;
node * n;
node * prev =NULL;
while(curr!=NULL){
//store the next list
n=curr->next;
//make current node point to previous
curr->next=prev;
//update
prev=curr;
curr=n;
}
head = prev;
}
node* reverseRecursive(node *head{
if(head->next==NULL||head==NULL){
return head;
}
node *smallHead= reverseRecursive(head->next);
node * curr=head;
curr->next->next=curr;
curr->next=NULL;
return smallHead;
}
void print(node *head){
//node *temp=head;
while(head!=NULL){
cout<<head->data;
head=head->next;
}
}
int main(){
node *head=NULL;
buildInput(head);
reverseIterative(head);
head = reverseRecursive(head);
print(head);
return 0;}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBub2RlewpwdWJsaWM6CiAgICBpbnQgZGF0YTsKICAgIG5vZGUgKm5leHQ7CiAgICAvL2NvbnN0cnVjdG9yCiAgICBub2RlKGludCBkKXsKICAgICAgICBkYXRhPWQ7CiAgICAgICAgbmV4dD1OVUxMOwogICAgfQoKfTsKdm9pZCBpbnNlcnRBdFRhaWwobm9kZSAqJmhlYWQsIGludCBkYXRhKXsKICAgIGlmKGhlYWQ9PU5VTEwpewogICAgICAgIGhlYWQ9bmV3IG5vZGUoZGF0YSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbm9kZSAqdGFpbD1oZWFkOwogICAgd2hpbGUodGFpbC0+bmV4dCE9TlVMTCl7CiAgICAgICAgdGFpbD10YWlsLT5uZXh0OwogICAgfQogICAgdGFpbC0+bmV4dD1uZXcgbm9kZShkYXRhKTsKICAgIHJldHVybjsKfQp2b2lkIGJ1aWxkSW5wdXQobm9kZSAqJmhlYWQpewogICAgaW50IGRhdGE7CiAgICBjaW4+PmRhdGE7CiAgICB3aGlsZShkYXRhIT0tMSl7CiAgICAgICAgaW5zZXJ0QXRUYWlsKGhlYWQsZGF0YSk7CiAgICAgICAgY2luPj5kYXRhOwogICAgfQp9CnZvaWQgcmV2ZXJzZUl0ZXJhdGl2ZShub2RlIComaGVhZCl7CiAgICBub2RlICogY3Vycj1oZWFkOwogICAgbm9kZSAqIG47CiAgICBub2RlICogcHJldiA9TlVMTDsKICAgIHdoaWxlKGN1cnIhPU5VTEwpewogICAgICAgIC8vc3RvcmUgdGhlIG5leHQgbGlzdAogICAgICAgIG49Y3Vyci0+bmV4dDsKICAgICAgICAvL21ha2UgY3VycmVudCBub2RlIHBvaW50IHRvIHByZXZpb3VzCiAgICAgICAgY3Vyci0+bmV4dD1wcmV2OwogICAgICAgIC8vdXBkYXRlCiAgICAgICAgcHJldj1jdXJyOwogICAgICAgIGN1cnI9bjsKICAgIH0KICAgIGhlYWQgPSBwcmV2Owp9Cgpub2RlKiByZXZlcnNlUmVjdXJzaXZlKG5vZGUgKmhlYWR7CiAgICBpZihoZWFkLT5uZXh0PT1OVUxMfHxoZWFkPT1OVUxMKXsKICAgICAgICByZXR1cm4gaGVhZDsKICAgIH0KICAgIG5vZGUgKnNtYWxsSGVhZD0gcmV2ZXJzZVJlY3Vyc2l2ZShoZWFkLT5uZXh0KTsKICAgIG5vZGUgKiBjdXJyPWhlYWQ7CiAgICBjdXJyLT5uZXh0LT5uZXh0PWN1cnI7CiAgICBjdXJyLT5uZXh0PU5VTEw7CiAgICByZXR1cm4gc21hbGxIZWFkOwp9Cgp2b2lkIHByaW50KG5vZGUgKmhlYWQpewogICAgLy9ub2RlICp0ZW1wPWhlYWQ7CiAgICB3aGlsZShoZWFkIT1OVUxMKXsKICAgICAgICBjb3V0PDxoZWFkLT5kYXRhOwogICAgICAgIGhlYWQ9aGVhZC0+bmV4dDsKICAgIH0KfQppbnQgbWFpbigpewogICAgbm9kZSAqaGVhZD1OVUxMOwogICAgYnVpbGRJbnB1dChoZWFkKTsKICAgIHJldmVyc2VJdGVyYXRpdmUoaGVhZCk7CiAgICBoZWFkID0gcmV2ZXJzZVJlY3Vyc2l2ZShoZWFkKTsKICAgIHByaW50KGhlYWQpOwpyZXR1cm4gMDt9Cg==