How to Reverse a Linked List

Reverse a Linked List

Yes, we are doing it today. The all-time famous interview question, Do you know how to reverse a Linked List? Well turns out, it isn’t that difficult and it’s all about logic and pointers, okay let’s get started.

Alright, I already wrote a post explaining the basic operations and structure of a Linked List. If you want to revise, have a look at – Linked List


This a normal Linked List, where each element in the list points to the next item.

[1] => [2] => [3] => [4] => [5]

So, in order to reverse a linked list, we need to do something like this,

[1] <= [2] <= [3] <= [4] <= [5]

Solution Approach

Before we move on, let’s see the constraints/conditions

  • Each item/node can point to only one node at a time
  • The [HEAD] pointer usually points to the first node
  • Space should be constant
  • We will do this in one iteration


  • Start iterating through the linked list
  • We use three pointers PREV, CURRENT, and NEXT
  • CURRENT and NEXT keep iterating and
  • PREV stays at the previous node and
  • We point the current Node’s next to PREV
[prev]  <=  [current]    [next]
  • After this PREV = CURRENT
  • Now, we make CURRENT = NEXT, so that we move to the next node
  • And again NEXT => CURRENT => NEXT
  • Now again point CURRENT node’s next to prev

I know this can be overwhelming and I made an info-graphic to make things simple you can follow this or code below to understand it easily.

Linked List
Reversing Linked List
Reverse a Linked List


Reverse a Linked List C++

#include <iostream>
using namespace std;

class Node
    int data;
    Node *next;

class LinkedList
    Node *first;

    LinkedList() { first = NULL; }
    LinkedList(int A[], int n);
    void Display();
    void Reverse();

void LinkedList::Reverse()
    Node *current=first;
    Node *prev=NULL, *next=NULL;
    while (current!=NULL)

LinkedList::LinkedList(int A[], int n)
    Node *last, *t;
    int i = 0;
    first = new Node;
    first->data = A[0];
    first->next = NULL;
    last = first;

    for (i = 1; i < n; i++)
        t = new Node;
        t->data = A[i];
        t->next = NULL;
        last->next = t;
        last = t;

    Node *p = first;
    while (first)
        first = first->next;
        delete p;
        p = first;

void LinkedList::Display()
    Node *p = first;
    while (p)
        cout << p->data <<" " ;
        p = p->next;
    cout << endl;

int main()
    // reversing a linked list
    int A[] = {11, 22, 33, 44, 55};
    LinkedList l(A, 5);
    return 0;


The best way to understand this would be to perform a dry run using a pen and paper, trust me once you know what’s happening at each step you’ll grasp the logic easily. This post is part of my #30DaysChallenge to write a blog post every day on what I learn. I hope you found this helpful ~ Thank You, Abhiram Reddy.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Popular posts