# Java Program for Reverse a linked list

• Difficulty Level : Basic
• Last Updated : 17 Jun, 2022

Given a pointer to the head node of a linked list, the task is to reverse the linked list. We need to reverse the list by changing links between nodes. Examples:

1->2->3->4->NULL
Output: Linked list should be changed to,
4->3->2->1->NULL

1->2->3->4->5->NULL
Output: Linked list should be changed to,
5->4->3->2->1->NULL

Input: NULL
Output: NULL

Input: 1->NULL
Output: 1->NULL

Iterative Method:

## Java

 `// Java program for reversing the linked list`   `class` `LinkedList {`   `    ``static` `Node head;`   `    ``static` `class` `Node {`   `        ``int` `data;` `        ``Node next;`   `        ``Node(``int` `d) {` `            ``data = d;` `            ``next = ``null``;` `        ``}` `    ``}`   `    ``/* Function to reverse the linked list */` `    ``Node reverse(Node node) {` `        ``Node prev = ``null``;` `        ``Node current = node;` `        ``Node next = ``null``;` `        ``while` `(current != ``null``) {` `            ``next = current.next;` `            ``current.next = prev;` `            ``prev = current;` `            ``current = next;` `        ``}` `        ``node = prev;` `        ``return` `node;` `    ``}`   `    ``// prints content of double linked list` `    ``void` `printList(Node node) {` `        ``while` `(node != ``null``) {` `            ``System.out.print(node.data + ``" "``);` `            ``node = node.next;` `        ``}` `    ``}`   `    ``public` `static` `void` `main(String[] args) {` `        ``LinkedList list = ``new` `LinkedList();` `        ``list.head = ``new` `Node(``85``);` `        ``list.head.next = ``new` `Node(``15``);` `        ``list.head.next.next = ``new` `Node(``4``);` `        ``list.head.next.next.next = ``new` `Node(``20``);` `        `  `        ``System.out.println(``"Given Linked list"``);` `        ``list.printList(head);` `        ``head = list.reverse(head);` `        ``System.out.println(``""``);` `        ``System.out.println(``"Reversed linked list "``);` `        ``list.printList(head);` `    ``}` `}`     `// This code has been contributed by Mayank Jaiswal`

Output

```Given Linked list
85 15 4 20
20 4 15 85 ```

Time Complexity: O(N), where N is the length of the given linked list
Auxiliary Space: O(1)

A Simpler and Tail Recursive Method:

## Java

 `// Java program for reversing the Linked list`   `class` `LinkedList {`   `    ``static` `Node head;`   `    ``static` `class` `Node {`   `        ``int` `data;` `        ``Node next;`   `        ``Node(``int` `d) {` `            ``data = d;` `            ``next = ``null``;` `        ``}` `    ``}`   `    ``// A simple and tail recursive function to reverse` `    ``// a linked list. prev is passed as NULL initially.` `    ``Node reverseUtil(Node curr, Node prev) {`   `        ``/* If last node mark it head*/` `        ``if` `(curr.next == ``null``) {` `            ``head = curr;`   `            ``/* Update next to prev node */` `            ``curr.next = prev;` `            ``return` `null``;` `        ``}`   `        ``/* Save curr->next node for recursive call */` `        ``Node next1 = curr.next;`   `        ``/* and update next ..*/` `        ``curr.next = prev;`   `        ``reverseUtil(next1, curr);` `        ``return` `head;` `    ``}`   `    ``// prints content of double linked list` `    ``void` `printList(Node node) {` `        ``while` `(node != ``null``) {` `            ``System.out.print(node.data + ``" "``);` `            ``node = node.next;` `        ``}` `    ``}`   `    ``public` `static` `void` `main(String[] args) {` `        ``LinkedList list = ``new` `LinkedList();` `        ``list.head = ``new` `Node(``1``);` `        ``list.head.next = ``new` `Node(``2``);` `        ``list.head.next.next = ``new` `Node(``3``);` `        ``list.head.next.next.next = ``new` `Node(``4``);` `        ``list.head.next.next.next.next = ``new` `Node(``5``);` `        ``list.head.next.next.next.next.next = ``new` `Node(``6``);` `        ``list.head.next.next.next.next.next.next = ``new` `Node(``7``);` `        ``list.head.next.next.next.next.next.next.next = ``new` `Node(``8``);`   `        ``System.out.println(``"Original Linked list "``);` `        ``list.printList(head);` `        ``Node res = list.reverseUtil(head, ``null``);` `        ``System.out.println(``""``);` `        ``System.out.println(``""``);` `        ``System.out.println(``"Reversed linked list "``);` `        ``list.printList(res);` `    ``}` `}` `// This code has been contributed by Mayank Jaiswal`

Output

```Original Linked list
1 2 3 4 5 6 7 8