## Problem Statement

Given the head of a Singly LinkedList, reverse the LinkedList. Write a function to return the new head of the reversed LinkedList.

**Constraints:**

- The number of nodes in the list is the range
`[0, 5000]`

. `-5000 <= Node.val <= 5000`

## Solution

To reverse a LinkedList, we need to reverse one node at a time. We will start with a variable `current`

which will initially point to the head of the LinkedList and a variable `previous`

which will point to the previous node that we have processed; initially `previous`

will point to null.

In a stepwise manner, we will reverse the `current`

node by pointing it to the `previous`

before moving on to the next node. Also, we will update the previous to always point to the `previous`

node that we have processed. Here is the visual representation of our algorithm:

## Code

Here is what our algorithm will look like:

## Time Complexity

The time complexity of our algorithm will be O(N) where ‘N’ is the total number of nodes in the LinkedList.

## Space Complexity

We only used constant space, therefore, the space complexity of our algorithm is O(1).