📅  最后修改于: 2023-12-03 14:56:19.881000             🧑  作者: Mango
这是一个用Java编写的程序,用于将给定链表围绕特定值进行分区,并保持原始顺序。该程序使用快速排序的算法,在O(n)的时间复杂度内完成分区操作。
该程序被广泛应用于类似于分隔链表这样的问题中,例如在Leetcode上。通过简单的修改,它也可以用于其他具有此类分区要求的问题。
首先,将该Java程序下载并安装在您的本地机器上。在启动程序时,您需要定义以下内容:
例如,您可以通过以下方式启动程序:
java partitionLinkedList 1,4,3,2,5,2 3
在此示例中,我们将链表定义为[1,4,3,2,5,2],并将其围绕值3进行分区。
程序将输出以下内容:
[1, 2, 2, 4, 3, 5]
这是分区后的结果,并且保持了原始顺序。
以下是该程序的完整Java代码。注意,它响应对上述输入的示例调用。
import java.util.*;
public class partitionLinkedList {
public static void main(String[] args) {
String[] input = args[0].split(",");
int partitionValue = Integer.parseInt(args[1]);
List<Integer> list = new ArrayList<Integer>();
for (String s : input) {
list.add(Integer.parseInt(s));
}
partition(list, partitionValue);
System.out.println(list.toString());
}
public static void partition(List<Integer> list, int partitionValue) {
int leftPartition = 0;
int rightPartition = list.size() - 1;
while (leftPartition < rightPartition) {
while (list.get(leftPartition) < partitionValue && leftPartition < rightPartition) {
leftPartition++;
}
while (list.get(rightPartition) >= partitionValue && leftPartition < rightPartition) {
rightPartition--;
}
if (leftPartition < rightPartition) {
Collections.swap(list, leftPartition, rightPartition);
}
}
}
}
以上是完整的Java代码片段。它包含一个命令行界面(CLI),您可以使用命令行参数启动它。