用于围绕给定值对链接列表进行分区并保持原始顺序的 Javascript 程序
给定一个链表和一个值 x,将其划分为所有小于 x 的节点首先出现,然后是所有值等于 x 的节点,最后是值大于或等于 x 的节点。应保留三个分区中每个分区中节点的原始相对顺序。隔板必须工作到位。
例子:
Input: 1->4->3->2->5->2->3,
x = 3
Output: 1->2->2->3->3->4->5
Input: 1->4->2->10
x = 3
Output: 1->2->4->10
Input: 10->4->20->10->3
x = 3
Output: 3->10->4->20->10
为了解决这个问题,我们可以使用快速排序的分区方法,但这不会保留两个分区中每个分区中节点的原始相对顺序。
下面是解决这个问题的算法:
- 将以下三个链表的第一个和最后一个节点初始化为NULL。
- 小于 x 的值的链表。
- 等于 x 的值的链接列表。
- 大于 x 的值的链接列表。
- 现在遍历原始链表。如果节点的值小于 x,则将其附加到较小列表的末尾。如果该值等于 x,则在等号列表的末尾。如果一个值更大,则在更大列表的末尾。
- 现在连接三个列表。
下面是上述思想的实现。
Javascript
输出:
2 10 4 5 30 50
有关详细信息,请参阅有关围绕给定值对链表进行分区并保持原始顺序的完整文章!