【问题标题】:How can I splice two list by append如何通过追加拼接两个列表
【发布时间】:2013-01-28 05:46:54
【问题描述】:

我试过了:

List splice(List l1, List l2){
    List l3 = new LinkedList();
    return l3;
}

List append(List l1, List l2) {
    List to_return = copy(l1);
    List l3 = copy(l2);
    while (true) {
        if (l3.isEmpty())
            return to_return;
        to_return = append1(to_return,hd(l3));
        l3 = tl(l3);
    }
}

接下来我该怎么做?如果我输入[1,2,3][a,b],我想得到[1,a,2,b,3]

【问题讨论】:

  • 您想替换项目吗?你确定这是你需要的吗?你不想要Map 什么的?
  • 我认为这更好地称为交错。拼接涉及末端。
  • 我猜他不想要地图,因为看起来他的列表可能不相等。如果他试图创建一个映射、字典或其他键值对,他可能想要相等的列表,对吧?除了需要将追加添加到拼接中(因为它现在只返回一个空列表),您可能希望创建一个循环,交替遍历每个列表并将每个索引添加到 to_return 列表。他们按照你现在做的方式......可能行不通。

标签: java list


【解决方案1】:

我不是很懂你的代码,但是你说

如果我输入[1,2,3]和[a,b],我想得到[1,a,2,b,3]。

这可以通过

来实现
static <T> List<T> interleave(List<T> list1, List<T> list2) {
    List<T> newList = new ArrayList<T>();
    List<T> shortOne = list1.size() < list2.size() ? list1 : list2;
    List<T> longOne  = list1.size() < list2.size() ? list2 : list1;
    for (int i = 0; i < shortOne.size(); i++) {
        newList.add(list1.get(i));
        newList.add(list2.get(i));
    }
    for (int i = shortOne.size(); i < longOne.size(); i++) {
        newList.add(longOne.get(i));
    }
    return newList;
}

编辑

根据您使用的List 实现,本文中接受答案的方法可能更有效:Java: Interleave two integer based arraylists -> good approach?

【讨论】:

  • 这里唯一的问题是使用get(int index)方法,如果OP发送LinkedList这个方法将是O(n^2)。
  • @LuiggiMendoza:没错。知道如何规避这个问题吗?
  • 使用可能重复问题的答案中建议的迭代器。
  • 是的,这个解决方案比我发布的要好。
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2021-08-14
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多