【问题标题】:Native Java method to prepend a LinkedList to another?将 LinkedList 附加到另一个的本机 Java 方法?
【发布时间】:2020-05-30 16:44:33
【问题描述】:

我在 Java 中有两个 LinkedLists,我想将一个列表的所有元素添加到另一个列表中。在 O(1) 时间内是否有本地方法可以做到这一点?我知道需要做的就是将第一个列表的最后一个指针设置为第二个列表的第一个,但似乎没有本地方法可以做到这一点。

另外,为了增加它的复杂性,我需要一种方法来将列表添加到另一个列表而不是附加它。我有列表 A 和 B,我需要将 B 的所有元素添加到列表 A。我不能只将 A 的元素添加到 B 的末尾,因为我想列出要修改的 A。

有没有办法做到这一点而不必实现我自己的LinkedList

【问题讨论】:

  • 但是到达第一个列表的末尾需要 O(n) 对吗?
  • 不,这是不可能的。我的意思是,也许您可​​以使用反射来访问和操作私有内部数据结构,但不要这样做。如果你需要这个性能特性,写你自己的链表。
  • @Tyler LinkedList是双链表,getLast()是O(1),可以看源码。
  • @KarolDowbecki 谢谢
  • 这(有点)以前被问过。 “在恒定时间内连接两个 java.util.LinkedList” 看这里:stackoverflow.com/questions/38303986/…

标签: java


【解决方案1】:

没有预定义的方法可以在 O(1) 时间内完成。但是,您可以使用 0 索引在 O(N) 中使用 LinkedList.add(index, Collection) 方法:

LinkedList<Integer> source = new LinkedList<>();
source.add(1);
source.add(2);
LinkedList<Integer> target = new LinkedList<>();
target.add(3);
target.add(4);

target.addAll(0, source);
System.out.println(target); // [1, 2, 3, 4]

上面是 O(source N),因为addAll 将遍历集合参数中的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多