Java 双链接列表的拆分方法

Java 双链接列表的拆分方法,java,data-structures,Java,Data Structures,我在编程方面很幼稚,所以我需要数据结构方面的帮助,我想拆分一个列表,我已经编写了以下代码,请任何人帮我确定,这是正确的。我将不胜感激 public Map<LinkedList, LinkedList> split(LinkedList list){ int length = list.getSize(); LinkedList list1 = new LinkedList(); //LinkedList list2 = new LinkedList();

我在编程方面很幼稚,所以我需要数据结构方面的帮助,我想拆分一个列表,我已经编写了以下代码,请任何人帮我确定,这是正确的。我将不胜感激

public Map<LinkedList, LinkedList> split(LinkedList list){

    int length = list.getSize();
    LinkedList list1 = new LinkedList();
    //LinkedList list2 = new LinkedList();
    //Node temp = end;
    for (int i=1; i<length/2; i++ )
    {
        list1.pushFront(list.popBack().getData());

    }
    Map<LinkedList, LinkedList> map = new HashMap<LinkedList, LinkedList>();
    map.put(this, list);
    map.put(this, list1);
    return map;

}

首先,对于方法中的返回类型,映射是一个奇怪的选择,并且您正在以一种奇怪的方式使用它。我建议使用void方法,它接受对源列表和两个目标拆分列表的引用

public void split (LinkedList source,LinkedList,target1,LinkedList target2)
{

}
其次,您应该决定您的方法是更改源列表还是保持其不变。您当前的实现将删除源列表的一半,并将其添加到输出列表中

如果这是您的意图,那么您的方法可以有两个参数,如下所示:

public void split (LinkedList source,LinkedList,target)
{
    for (int i=1; i<length/2; i++ )
    {
        target.pushFront(source.popBack().getData());
    }
}

在这种情况下,您可以交替地决定在方法内部创建新列表,并让方法返回它,但这会造成混乱,因为实际输出是您修改的输入列表和由方法创建的新列表。这就是为什么我认为最好不要返回任何内容。

您使用的映射是错误的,请阅读有关映射的信息。始终尝试返回实际返回值不是比使用c样式提供的目标对象引用更好吗?简单的一对就可以了。@ifLoop我想这是个意见问题。你指的是哪一对课?我在我的IDE中搜索了Pair,得到了几个建议android.util.Pair、sun.security.tools.Pair等等,它们都不是JavaSE甚至JavaEE包的一部分,但是更重要的是简单地返回结果,而不是编写一个JavaDoc来解释所提供的参数所引用的对象将被操作。我指的是这个类,因为JavaFX是jdk的一部分。在此版本之前工作时,可能是一种选择。@Eran您是对的,我的目的是修改源列表,因为这样做会占用更少的空间,如果我不返回任何列表,那么如何才能显示拆分列表,。。?再一次,我是编程新手,所以如果我遇到任何愚蠢的事情,请避免。@Asad您可以将输入列表+空列表传递给您的方法。该方法将从输入列表中删除项,并将它们添加到空列表中。调用该方法后,两个列表都将包含原始列表的一半。