Sort Linked List

Posted: 4 Dec, 2020
Difficulty: Easy


Try Problem

You are given a Singly Linked List of integers which is sorted based on absolute value.

You have to sort the Linked List based on actual values.

The absolute value of a real number x, denoted |x|, is the non-negative value of x without regard to its sign.

If the given list is {1 -> -2 -> 3} (which is sorted on absolute value), the returned list should be {-2 -> 1 -> 3}.
Input Format:
The first line of input contains a single integer ‘T’, representing the number of test cases or queries to be run. Then the T test cases follow.

The first line of each test case contains the elements of the singly linked list separated by a single space and terminated by -1. Hence, -1 would never be a list element.

It is guaranteed that the given list is sorted based on absolute value.
Output Format:
For each test case, print the sorted linked list. The elements of the sorted list should be single-space separated, terminated by -1.

The output of each test case is printed in a separate line.
Note :
You don't need to print the output, it has already been taken care of. Just implement the given function.
Constraints :
1 <= T <= 10
1 <= 'N' <= 5 * 10^4
-10^9 <= 'data' <= 10^9 and 'data' != -1

Where 'N' denotes the number of elements in the Singly Linked List and 'data' represents the value of those elements.

Time Limit : 1 sec
Approach 1

We will use the ‘Insertion Sort’ algorithm to sort the given linked list.




We will make a list ‘SORTED_LIST’ which is initially empty and it stores the list after sorting.

We will traverse the given list and insert the node in the ‘SORTED_LIST’ such that nodes are present in sorted order.


For each node follow these steps:


  • If ‘SORTED_LIST’ is empty or the head of the ‘SORTED_LIST’ has a value greater than the node, in this case, the current node will become the new head of ‘SORTED_LIST’.
  • Else, we will traverse the ‘SORTED_LIST’ until we find the node that has a value greater than the current node or until we reach the end.
  • We will insert the node at this position and change it’s ‘next’ value such that it points to the node which is greater than the current node.
Try Problem