【问题标题】:Cut a part from a linked list? [duplicate]从链接列表中剪切一部分? [复制]
【发布时间】:2019-11-09 20:29:04
【问题描述】:

我可以按索引从链接列表中剪切(删除)一部分吗? 例如,如果输入是“100”,我想删除前100个元素 从一个链表。目前,我的代码将它们一一删除。

public void remove(LinkedList<String> queue, int count){
    if (count > queue.size()) {
        System.out.println(ERROR);
        return;
    }

    for (int i = 0; i < count; i++) {
        queue.remove(0);
    }
}

【问题讨论】:

  • 不,这里没有捷径——你必须遍历列表才能找到第 100 个元素,所以时间复杂度是一样的。您可以跳过删除每个节点,只需将元素 101 加入根即可。

标签: java performance linked-list


【解决方案1】:

你试试这个:

splitList =  queue.subList(0, 100);

【讨论】:

  • 会更快吗?
  • subList 返回 List,而不是 LinkedList。我不能施放它。
  • 按照问题的要求,删除前 100 个元素” 以什么方式?
  • 问题是我需要比一个一个更快的移除元素。
【解决方案2】:

要删除 List(无论是 ArrayListLinkedList 还是任何其他类型的可变列表)的前 100 个元素:

list.subList(0, 100).clear();

这在subList()的javadoc中有记录:

此方法无需显式范围操作(通常存在于数组中的那种)。任何需要列表的操作都可以通过传递 subList 视图而不是整个列表来用作范围操作。例如,以下成语从列表中删除一系列元素:

list.subList(from, to).clear();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2015-11-05
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多