📌  相关文章
📜  用于围绕给定值对链接列表进行分区并保持原始顺序的 Javascript 程序

📅  最后修改于: 2022-05-13 01:57:44.579000             🧑  作者: Mango

用于围绕给定值对链接列表进行分区并保持原始顺序的 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 

为了解决这个问题,我们可以使用快速排序的分区方法,但这不会保留两个分区中每个分区中节点的原始相对顺序。
下面是解决这个问题的算法:

  1. 将以下三个链表的第一个和最后一个节点初始化为NULL。
    • 小于 x 的值的链表。
    • 等于 x 的值的链接列表。
    • 大于 x 的值的链接列表。
  2. 现在遍历原始链表。如果节点的值小于 x,则将其附加到较小列表的末尾。如果该值等于 x,则在等号列表的末尾。如果一个值更大,则在更大列表的末尾。
  3. 现在连接三个列表。

下面是上述思想的实现。

Javascript


输出:

2 10 4 5 30 50

有关详细信息,请参阅有关围绕给定值对链表进行分区并保持原始顺序的完整文章!