用于对已经按绝对值排序的链表进行排序的 Javascript 程序
给定一个基于绝对值排序的链表。根据实际值对列表进行排序。
例子:
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
资料来源:亚马逊采访
一个简单的解决方案是从头到尾遍历链表。对于每个访问的节点,检查它是否出现故障。如果是,请将其从当前位置移除并插入到正确位置。这是链表插入排序的实现,这个解决方案的时间复杂度是O(n*n)。
更好的解决方案是使用归并排序对链表进行排序。该解决方案的时间复杂度为 O(n Log n)。
一个有效的解决方案可以在 O(n) 时间内工作。一个重要的观察结果是,所有负面元素都以相反的顺序存在。所以我们遍历链表,每当我们发现一个乱序的元素,我们就把它移到链表的最前面。
下面是上述思想的实现。
每当我们发现一个乱序的元素时,我们就把它移到链表的前面。
下面是上述思想的实现。
Javascript
输出:
Original list :
0 -> 1 -> -2 -> 3 -> 4 -> 5 -> -5
Sorted list :
-5 -> -2 -> 0 -> 1 -> 3 -> 4 -> 5
时间复杂度: O(N)
辅助空间: O(1)
有关详细信息,请参阅已按绝对值排序的完整文章排序链表!