Given a linked list which is sorted based on absolute values. Sort the list based on actual values.
Input : 1 -> -10 output: -10 -> 1 Input : 1 -> -2 -> -3 -> 4 -> -5 output: -5 -> -3 -> -2 -> 1 -> 4 Input : -5 -> -10 Output: -10 -> -5 Input : 5 -> 10 output: 5 -> 10
Source : Amazon Interview
A simple solution is to traverse the linked list from beginning to end. For every visited node, check if it is out of order. If it is, remove it from its current position and insert at correct position. This is implementation of insertion sort for linked list and time complexity of this solution is O(n*n).
A better solution is to sort the linked list using merge sort. Time complexity of this solution is O(n Log n).
An efficient solution can work in O(n) time. An important observation is, all negative elements are present in reverse order. So we traverse the list, whenever we find an element that is out of order, we move it to the front of linked list.
Below is the implementation of above idea.
Original list : 0 -> 1 -> -2 -> 3 -> 4 -> 5 -> -5 Sorted list : -5 -> -2 -> 0 -> 1 -> 3 -> 4 -> 5
This article is contributed by Rahul Titare. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Given a linked list which is sorted, how will you insert in sorted way
- Insert value in sorted way in a sorted doubly linked list
- Merge K sorted Doubly Linked List in Sorted Order
- Sort Linked List containing values from 1 to N
- Sort a linked list that is sorted alternating ascending and descending orders?
- Sort a k sorted doubly linked list
- Construct a Maximum Sum Linked List out of two Sorted Linked Lists having some Common nodes
- Sort a nearly sorted (or K sorted) array
- Sorted merge of two sorted doubly circular linked lists
- Check if absolute difference of consecutive nodes is 1 in Linked List
- Absolute distinct count in a Linked List
- XOR Linked List - A Memory Efficient Doubly Linked List | Set 1
- XOR Linked List – A Memory Efficient Doubly Linked List | Set 2
- Merge a linked list into another linked list at alternate positions
- Check if a linked list is Circular Linked List
- Convert singly linked list into circular linked list
- Difference between Singly linked list and Doubly linked list
- Convert Singly Linked List to XOR Linked List
- Create new linked list from two given linked list with greater element at each node
- Why Quick Sort preferred for Arrays and Merge Sort for Linked Lists?