列表拼接功能

时间:2015-02-12 16:29:22

标签: java linked-list

我需要编写一个拼接两个列表对象的函数。例如

public static List splice(List l1, List l2) // takes two lists and interleaves them

例如,输出应为

splice([1,2,3],[a,b,c])

应该列出清单 [1,a,2,b,3,c]如果两个列表的长度不相等,则函数应尽可能地交错,然后附加较长列表的其余部分。例如,

splice([1,2],[a,b,c,d])应该[1,a,2,b,c,d]

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以使用迭代器依次移动每个列表:

static <T> List<T> splice(List<T> one, List<T> two) {
    Iterator<T> oneIter = one.iterator();
    Iterator<T> twoIter = two.iterator();
    List<T> result = new ArrayList<T>();

    while (oneIter.hasNext() || twoIter.hasNext()) {
        if (oneIter.hasNext()) {
            result.add(oneIter.next());
        }
        if (twoIter.hasNext()) {
            result.add(twoIter.next());
        }
    }

    return result;
}

您可以这样测试:

public static void main(String[] args) {
    System.out.println(splice(
        Arrays.asList("one", "two", "three"),
        Arrays.asList(1, 2, 3)
    ));
}

打印:

[one, 1, two, 2, three, 3]