Reverse Linked List

Reverse the direction of pointers in a linked list

Algorithm Code

Time: O(n) | Space: O(1)

1function reverseList(head) {
2  let prev = null;
3  let current = head;
4  
5  while (current !== null) {
6    let next = current.next;
7    current.next = prev;
8    prev = current;
9    current = next;
10  }
11  
12  return prev; // New head
13}

Algorithm Steps

Step 1 of 16

1

Initialize Pointers

Set prev = null, current = head

2

Store Next Pointer

Store next = current.next (node 1)

3

Reverse Link

Point current.next to prev (null)

4

Move Pointers

Move prev to node 0, current to node 1

5

Store Next Pointer

Store next = current.next (node 2)

6

Reverse Link

Point current.next to prev (node 0)

7

Move Pointers

Move prev to node 1, current to node 2

8

Store Next Pointer

Store next = current.next (node 3)

9

Reverse Link

Point current.next to prev (node 1)

10

Move Pointers

Move prev to node 2, current to node 3

11

Store Next Pointer

Store next = current.next (node 4)

12

Reverse Link

Point current.next to prev (node 2)

13

Move Pointers

Move prev to node 3, current to node 4

14

Store Next Pointer

Store next = current.next (null)

15

Reverse Link

Point current.next to prev (node 3)

16

Complete

Linked list reversed! Return prev as new head

Linked List

prev
NULL
current
1
0
next
2
1
3
2
4
3
5
4

Iterative Approach

Technique: Three pointers (prev, current, next)
Space: O(1) - constant space
Current
Prev
Next
Processed
Step 0 of 150%
0.25x4x