Java中的数据结构与操作删除节点后的所有节点

apm*_*apm 2 java linked-list data-structures singly-linked-list

我正在寻找Java中的(预定义的)数据结构,它将删除节点之后的所有元素.下面给出的样本表示.

例如:

在删除之前

head
 ?>1 -> 2 -> 3 -> 4 -> 5 -> 6 ->7
Run Code Online (Sandbox Code Playgroud)

删除后

removeAllFrom(5)

head
?>1 -> 2 -> 3 -> 4
Run Code Online (Sandbox Code Playgroud)

我查了很多java DS,但是在java中找不到完美的.

(1.优选java.util中的数据结构.

2.头部和迭代的插入是我正在使用的其他操作)

谢谢您的帮助 :)


编辑 - 1

找到指定要删除的元素后(在示例中为5),我们只需要删除下一个节点之间的链接.

我检查了给出的答案的实现,但在这两种情况下,它分别删除每个节点.只是好奇知道任何其他方式来做到这一点.:)

public void clear() {
    removeRange(0, size());
}

protected void removeRange(int fromIndex, int toIndex) {
    ListIterator<E> it = listIterator(fromIndex);
    for (int i=0, n=toIndex-fromIndex; i<n; i++) {
        it.next();
        it.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

好吧,java.util.LinkedList实现List接口,它有一个subList()方法.使用该方法,您可以获取原始列表尾部的子列表,并通过清除它,截断原始列表:

list.subList(firstIndexToRemove,list.size()).clear();
Run Code Online (Sandbox Code Playgroud)

来自Javadoc:

列出java.util.List.subList(int fromIndex,int toIndex)

返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图.(如果fromIndex和toIndex相等,则返回的列表为空.)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然.返回的列表支持此列表支持的所有可选列表操作.

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

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

这要求您知道要从中删除所有元素的节点的索引.