Reverse a linked list - Iterative method

Author: Al-mamun Sarkar Date: 2020-04-16 15:01:59

Reverse a linked list - Iterative method. The following c++ code shows how to print a linked list in reverse order.

 

Code:

#include<iostream>
using namespace std;

struct Node
{
    int data;
    Node* next;
};

Node *head;

// Ia an item to Link list
void Insert(int x, int p)
{
    Node *temp = new Node();
    temp->data = x;
    temp->next = NULL;

    if (p == 1) {
        temp->next = head;
        head = temp;
        return;
    }

    Node *temp1 = head;

    for (int i=0; i<p-2; i++) {
        temp1 = temp1->next;
    }
    temp->next = temp1->next;
    temp1->next = temp;

}


// Print link list
void Print()
{
    Node *temp = head;
    cout << "List is : ";
    while (temp != NULL) {
        cout << temp->data << " ";
        temp = temp->next;
    }
    cout << endl;
}


// Reverse link list
void Reverse()
{
    Node *current, *pre, *next;
    current = head;
    pre = NULL;

    while (current != NULL) {
        next = current->next;
        current->next = pre;
        pre = current;
        current = next;
    }
    head = pre;
}


int main()
{
    head = NULL;
    cout << "How many numbers : ";
    int n, x, p;

    cin >> n;

    for (int i=0; i<n; i++) {
        cout << "Enter the number " << endl;
        cin >> x >> p;
        Insert(x, p);
        Print();
    }

    Reverse();

    cout << "Print after Reverse : " << endl;
    Print();

    return 0;
}