#include <iostream>
using namespace std;
class Node{
public:
int data;
Node *next;
};
class linkedlist{
public:
Node *head = NULL;
Node *tail = NULL;
int size =0;
void addLast(int val){
Node *temp = new Node();
temp->data = val;
temp->next = NULL;
if(size == 0){
head = temp;
tail = temp;
}else{
tail->next = temp;
tail = temp;
}
size++;
}
void print(){
Node *temp = head;
while(temp != NULL){
cout<<temp->data<<" ";
temp = temp->next;
}
}
private:
Node *getNode(int idx){
Node *temp = head;
if(idx < 0 || idx >= size){
return NULL;
}
while(idx){
temp = temp->next;
idx--;
}
return temp;
}
public:
void reverseiteratively(){
int i = 0;
int j= size-1;
while(i<j){
Node *left = getNode(i);
Node *right = getNode(j);
int temp = left->data;
left->data = right->data;
right->data = temp;
i++;
j--;
}
}
void reversebypointer(){
Node* temp = NULL;
Node* temp1 = head;
while(temp1 != NULL){
Node *safe = temp1->next;
temp1->next = temp;
temp = temp1;
temp1 = safe;
}
Node *saver = head;
head = temp;
tail = saver;
}
};
int main() {
linkedlist L;
L.addLast(4);
L.addLast(3);
L.addLast(2);
L.addLast(1);
L.reversebypointer();
L.print();
}