If you want to practice data structure and algorithm programs, you can go through data structure and algorithm interview questions.

In this post, we will see how to reverse a linked list in java.

This is one of popular interview question.

## Java Linked List Interview Programs:

- How to reverse a linked list in pairs
- How to find middle element of linked list in java
- How to detect a loop in linked list in java
- Find start node of loop in linkedlist
- How to find nth element from end of linked list
- How to check if linked list is palindrome in java
- Add two numbers represented by linked list in java

There can be two solution to reverse a linked list in java

- Iterative
- Recursive

## Iterative

Logic for this would be:

- Have three nodes i.e previousNode,currentNode and nextNode
- When currentNode is starting node, then previousNode will be null
- Assign currentNode.next to previousNode to reverse the link.
- In each iteration move currentNode and previousNode by 1 node.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public static Node reverseLinkedList(Node currentNode) { // For first node, previousNode will be null Node previousNode=null; Node nextNode; while(currentNode!=null) { nextNode=currentNode.next; // reversing the link currentNode.next=previousNode; // moving currentNode and previousNode by 1 node previousNode=currentNode; currentNode=nextNode; } return previousNode; } |

Java program to reverse a linkedlist will be :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
package org.arpit.java2blog; public class LinkedList{ private Node head; private static class Node { private int value; private Node next; Node(int value) { this.value = value; } } public void addToTheLast(Node node) { if (head == null) { head = node; } else { Node temp = head; while (temp.next != null) temp = temp.next; temp.next = node; } } public void printList(Node head) { Node temp = head; while (temp != null) { System.out.format("%d ", temp.value); temp = temp.next; } System.out.println(); } // Reverse linkedlist using this function public static Node reverseLinkedList(Node currentNode) { // For first node, previousNode will be null Node previousNode=null; Node nextNode; while(currentNode!=null) { nextNode=currentNode.next; // reversing the link currentNode.next=previousNode; // moving currentNode and previousNode by 1 node previousNode=currentNode; currentNode=nextNode; } return previousNode; } public static void main(String[] args) { LinkedList list = new LinkedList(); // Creating a linked list Node head=new Node(5); list.addToTheLast(head); list.addToTheLast(new Node(6)); list.addToTheLast(new Node(7)); list.addToTheLast(new Node(1)); list.addToTheLast(new Node(2)); list.printList(head); //Reversing LinkedList Node reverseHead=reverseLinkedList(head); System.out.println("After reversing"); list.printList(reverseHead); } } |

Run above program, you will get following output:

1 2 3 4 5 |
5 6 7 1 2 After reversing 2 1 7 6 5 |

## Recursive

**Base case:**Base case for this would be either node is null or node.next is null

1 2 3 4 5 6 7 8 9 10 11 12 |
public static Node reverseLinkedList(Node node) { if (node == null || node.next == null) { return node; } Node remaining = reverseLinkedList(node.next); node.next.next = node; node.next = null; return remaining; } |

Output of this program will be same as above program.

Now lets understand logic for above recursive program.

5->6->7->1->2

Above function will terminate when last node(2) ‘s next will be null.so while returning when you reach at node with value 1,If you closely observe** node.next.next=node** is actually setting 2->1(i.e. reversing the link between node with value 1 and 2) and **node.next=null **is removing link 1->2. So in each iteration, you are reversing link between two nodes.

Below diagram will make it clear

Please go through java interview programs for more such programs.

That’s all about reverse a linked list in java.

#### Join Our News Letter – Stay Updated

**Subscribe to Awesome Java Content**.

I searched google like hundreds of time … but all are hazy to understand the basic concept of linkedList .. Thanks a lot .. You simply done a great job .. It is very helpful for the beginner and the people who are taking preparation for their first job… 🙂

Hi there is something wrong in the recursive function:

public static Node reverseLinkedList(Node node) {

if (node == null || node.next == null) {

return node;

}

Node remaining = reverseLinkedList(node.next);

node.next.next = node;

node.next = null;

return remaining;

}

when it reaches the last node, then how call you call node.next.next

the recursion stops in the second last node when you have the node.next = null.

Suppose I have my list as 2 4 5 6

In this case when I call 5.next = 6 then the node.next value wil be null and it will return 6 .

so the node.next.next is actually 5.next.next = 6.next which is going to be pointed to 5 .

Hope I am not confusing you. 🙂

Hello

I think that in this condition

if (node == null || node.next == null) {

return node;

}

is abit vague because you do not set the head in this recursive function. By the end of the function, the head is lost.

If i am wrong, Could you please exaplain how the function works?

this one of best website for algorithem impl. very nice implementation.