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
- Sort a linked list that is sorted alternating ascending and descending orders?
- Sort a k sorted doubly linked list
- Sort a nearly sorted (or K sorted) array
- Merge a linked list into another linked list at alternate positions
- Why Quick Sort preferred for Arrays and Merge Sort for Linked Lists?
- Sorted insert for circular linked list
- Merge two sorted linked lists such that merged list is in reverse order
- Check if linked list is sorted (Iterative and Recursive)
- Merge two sorted linked list without duplicates
- Sort an array according to absolute difference with a given value "using constant extra space"
- Sort a linked list of 0s, 1s and 2s
- Merge Sort for Doubly Linked List
- C Program for Bubble Sort on Linked List
- Insertion Sort for Doubly Linked List
- Recursive selection sort for singly linked list | Swapping node links
- Sort a linked list of 0s, 1s and 2s by changing links
- Sort the linked list in the order of elements appearing in the array
- Sort the biotonic doubly linked list | Set-2
- Bubble Sort On Doubly Linked List