“对链接列表进行分区”是什么意思?

时间:2018-12-23 22:35:14

标签: algorithm data-structures linked-list

有人可以向我解释这个问题到底在问什么吗?我对此问题感到困惑,因为它说小于x(= 3)的值应该在3之前,但是为什么4在3之前出现,因为它> = 3?第二个例子以及为什么10在5之前都是同样的疑问。

  

给出一个链表和一个值x,对它进行分区,以使所有小于x的节点排在大于或等于x的节点之前。您应该保留两个分区中每个分区中节点的原始相对顺序。如果列表中包含x,则x的值只需在小于x的元素之后。分区元素x可以出现在“右侧分区”中的任何位置。

     

例如,

> Given 1->4->3->2->5->2 and x = 3, return 1->2->2->4->3->5.
> Given 3->5->8->5->10->2->1 and x = 5 return 3->1->2->10->5->5->8

2 个答案:

答案 0 :(得分:0)

针对x个链接列表进行分区,将列表分为3组:

Group1: values less than x
Group2: values equal to x
Group3: values more than x

分区也可以分为2组(这就是问题中的说明):

Group1: values less than x
Group2: values greater or equal to x

但是组中的顺序保持不变。

在您的示例中:1-> 4-> 3-> 2-> 5-> 2,

将x = 3划分为3个组将产生:1-> 2-> 2-> 3-> 4-> 5

将x = 3分成2组,应产生:1-> 2-> 2-> 4-> 3-> 5

这里4排在3之前,因为它保留了第2组的原始顺序。

答案 1 :(得分:0)

我认为您的困惑与如何处理列表中等于x(枢轴编号)的项目有关。需要注意的关键是这部分说明:

  

所有小于x的节点位于大于或等于x的节点之前

您只应该将列表分为两部分:“小于x”和“大于或等于x”。等于x的任何值都在第二类中,并且与其他值没有区别。

您似乎本能地希望进行三向分区,其中等于x的值不包含在列表的两个主要部分中。取而代之的是,所有等于x的值都将停留在中间值,介于“小于x”值和“大于x”值之间。

三向分区通常比两向分区更有效,但这不是您的问题所要的。这就是为什么您被告知对某些输入给出错误答案的原因。

请注意,这仍然与您给出的第二个示例毫无意义。枢轴值3->5->8->5->10->2->1上的5的双向稳定分区应该给出:3->2->1->5->8->5->10,而不是您描述的输出,这会在没有明显原因的情况下对列表的两侧进行重新排序。