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

📅  最后修改于: 2023-12-03 14:56:19.881000             🧑  作者: Mango

用于围绕给定值对链表进行分区并保持原始顺序的Java程序

简介

这是一个用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),您可以使用命令行参数启动它。