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您可以将输入列表+空列表传递给您的方法。该方法将从输入列表中删除项,并将它们添加到空列表中。调用该方法后,两个列表都将包含原始列表的一半。