using namespace std;
/* Link list node */
struct Node {
int data;
struct Node* next;
Node(int data)
{
this->data = data;
next = NULL;
}
};
/*This Function takes head of Linked list as parameter */
/* and reverses the linked list by using an iterative approach*/
Node* reverse_iter(Node* head)
{
// Initializing the current,next and previous pointers
Node* current = head;
Node *prev = NULL, *next = NULL;
while (current != NULL) {
// Storing the next pointer
next = current->next;
// Reverse the current node's pointer
current->next = prev;
// Moving the pointers one position ahead.
prev = current;
current = next;
}
head = prev;
return head;
}
/*This Function takes head of Linked list as parameter */
/* and reverses the linked list by using an recursive approach*/
Node* reverse_rec(Node* head)
{
//If there is no element or only one element in the list then simply return head.
if (head == NULL || head->next == NULL)
return head;
/* Calling the same function recursively which reverses the rest list and put the first element at the end */
Node* rest = reverse_rec(head->next);
head->next->next = head;
head->next = NULL;
/* This fixes the head pointer in every recursive call*/
return rest;
}
/* This Function prints the linked list */
void print(Node* head)
{
struct Node* temp = head;
while (temp != NULL) {
cout < temp-="">data < "="">
temp = temp->next;
}
}
/* This Function inserts the data into Linked list */
Node* push(Node* head, int data)
{
Node* temp = new Node(data);
temp->next = head;
head = temp;
return head;
}
int main()
{
Node* head = NULL, *newhead, *updatedhead;
/* Start with the empty list */
newhead = push(head, 10);
newhead = push(newhead, 20);
newhead = push(newhead, 30);
newhead = push(newhead, 40);
newhead = push(newhead, 50);
newhead = push(newhead, 60);
cout < "given="" linked="">
print(newhead);
updatedhead = reverse_iter(newhead);
cout < "\n\nreversed="" linked="" list="" using="" iterative="" approach="">
print(updatedhead);
head = NULL;
/* Start with the empty list */
newhead = push(head, 10);
newhead = push(newhead, 20);
newhead = push(newhead, 30);
newhead = push(newhead, 40);
newhead = push(newhead, 50);
newhead = push(newhead, 60);
updatedhead = reverse_rec(newhead);
cout < "\n\nreversed="" linked="" list="" using="" recursive="" approach="">
print(updatedhead);
return 0;
}