5ms, O(1) space: 5 small steps that easy to follow
Preparation: * Order in LinkedList will be changed, extra variable required -> ListNode n. * LinkedList needs to be divided in sorted and unsorted parts -> List
**Preparation:**
* Order in LinkedList will be changed, extra variable required -> `ListNode n`.
* LinkedList needs to be divided in sorted and unsorted parts -> `ListNode pivot `.
* Iteration of sorted part starting from head -> `ListNode current = head`.

**Implementation:**
1. Iterate LinkedList.
2. Special case: `pivot` smaller than current element:
	* Update pivot : `pivot = n`.
	*  Next iteration -> **step1**.
2. Save link to next element: `n = pivot.next.`
3. Unattach element from list: `pivot.next = n.next`.
4. Insert element into sorted part.
```
public ListNode insertionSortList(ListNode head) {
   if( head == null || head.next == null ) return head;

    ListNode pivot = head;
    ListNode n = null;
    while( pivot.next != null){
      n = pivot.next;
      if( n.val >= pivot.val) {
        pivot = n;
        continue;
      }
      pivot.next = n.next;
      
      if( n.val <= head.val) {
        n.next = head;
        head = n;
        continue;
      } 
      
      ListNode current = head;
      while( current.next != n && n.val > current.next.val) current = current.next;
      n.next = current.next;
      current.next = n;
    }
    return head;
  }
```
[]