2013-02-12 21 views
0

我想:我如何拼接两个列表通过追加

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]

+0

你想交替项目?你确定这就是你需要的吗?你不想要一个[Map](http://docs.oracle.com/javase/6/docs/api/java/util/Map.html)什么的? – 2013-02-12 20:00:31

+0

我认为这被称为交错。拼接涉及到两端。 – user7116 2013-02-12 20:09:11

+0

我猜他不想要地图,因为看起来他的列表可能不相同。如果他试图创建地图,字典或其他关键值对,他可能会需要相同的列表,对吧? 除了需要添加追加到你的拼接(因为它现在刚刚返回一个空列表),你可能会想要创建一个循环,交替遍历每个列表并将每个索引添加到to_return列表中。他们的方式,你现在正在做...可能不起作用。 – 2013-02-12 20:09:48

回答

1

我真的不理解你的代码,但是你说

如果我输入[1,2,3]和[A,B],我想要得到[1,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?

+0

唯一这里的问题是使用'get(int index)'方法,如果OP发送'LinkedList',这个方法将会是O(n^2)。 – 2013-02-12 20:10:16

+0

@LuiggiMendoza:没错。任何想法如何绕过这个? – jlordo 2013-02-12 20:12:53

+1

按照可能的重复问题的答案中提出的方法使用迭代器。 – 2013-02-12 20:14:53