You are given a singly linked list, write a program to sort it using **insertion sort.**

**Problem Note:**

- Return the
`head`

of the sorted linked list - Try to solve the problem using
**in-place**algorithm(O(1) space).

**Example 1**

```
Input: 4->3->1
Output: 1->3->4
Explanation: Firstly, 1 is compared to all elements and put in place such that 1->4->3. Then 3 is put in place after comparing it to all elements such that 1->3->4. 4 is already in place and the list is sorted.
```

**Example 2**

```
Input: 10->4->3->2->1
Output: 1->2->3->4->10
Explanation:
1 is compared to give 1->10->4->3->2
2 is compared to give 1->2->10->4->3
3 is compared to give 1->2->3->10->4
4 is compared to give 1->2->3->4->10
10 is compared to give the sorted list 1->2->3->4->10.
```

**Example 3**

```
Input: 1->2->3
Output: 1->2->3
Explanation: The list is already sorted.
```