双向链表的拆分方法

时间:2014-11-02 09:35:20

标签: java data-structures

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

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;

}

1 个答案:

答案 0 :(得分:0)

首先,对于方法中的返回类型,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());
    }
}

在这种情况下,您可以交替决定在方法内创建新列表并让方法返回它,但这会让人感到困惑,因为实际输出既是输入列表(您修改了)又创建了新列表通过该方法。这就是为什么我认为最好不要退货。