[英]What is meant by 'Partitioning a 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
相对于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的原始顺序。
我认为您的困惑与如何处理列表中等于x
(枢轴数)的项目有关。 需要注意的关键是说明的这一部分:
所有小于x的节点都在大于或等于x的节点之前
您只需要将列表分为两部分:“小于x
”和“大于或等于x
”。 等于x
任何值都在第二类中,并且与其他值没有区别。
您似乎本能地希望进行三向分区,其中等于x
的值不包含在列表的两个主要部分中。 相反,所有等于x
值都将卡在“小于x
”值与“大于x
”值之间的中间。
三向分区通常比两向分区更有效,但这不是您的问题所要的。 这就是为什么您被告知您对某些输入给出错误答案的原因。
请注意,这仍然与您给出的第二个示例没有任何意义。 枢轴值5
上的3->5->8->5->10->2->1
的双向稳定分区应为: 3->2->1->5->8->5->10
,而不是您描述的输出,这没有明显的原因就可以对列表的两侧进行重新排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.