Java 中的数据结构,操作删除节点后的所有节点
Data structure in Java with operation remove all nodes after a node
我正在 Java 中寻找(预定义的)数据结构,它将删除节点后的所有元素。
下面给出了示例表示。
例如:
移除前
head
┕>1 -> 2 -> 3 -> 4 -> 5 -> 6 ->7
删除后
removeAllFrom(5)
head
┕>1 -> 2 -> 3 -> 4
我查了很多 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();
}
}
嗯,java.util.LinkedList
实现了 List
接口,它有一个 subList()
方法。使用那个方法,你可以得到原始列表尾部的子列表,通过清除它,截断原始列表:
list.subList(firstIndexToRemove,list.size()).clear();
来自 Javadoc:
List java.util.List.subList(int fromIndex, int toIndex)
Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. The returned list supports all of the optional list operations supported by this list.
This method eliminates the need for explicit range operations (of the sort that commonly exist for arrays). Any operation that expects a list can be used as a range operation by passing a subList view instead of a whole list. For example, the following idiom removes a range of elements from a list:
list.subList(from, to).clear();
这需要您知道要从中删除所有元素的节点的索引。
我正在 Java 中寻找(预定义的)数据结构,它将删除节点后的所有元素。 下面给出了示例表示。
例如:
移除前
head
┕>1 -> 2 -> 3 -> 4 -> 5 -> 6 ->7
删除后
removeAllFrom(5)
head
┕>1 -> 2 -> 3 -> 4
我查了很多 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();
}
}
嗯,java.util.LinkedList
实现了 List
接口,它有一个 subList()
方法。使用那个方法,你可以得到原始列表尾部的子列表,通过清除它,截断原始列表:
list.subList(firstIndexToRemove,list.size()).clear();
来自 Javadoc:
List java.util.List.subList(int fromIndex, int toIndex)
Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. The returned list supports all of the optional list operations supported by this list.
This method eliminates the need for explicit range operations (of the sort that commonly exist for arrays). Any operation that expects a list can be used as a range operation by passing a subList view instead of a whole list. For example, the following idiom removes a range of elements from a list:
list.subList(from, to).clear();
这需要您知道要从中删除所有元素的节点的索引。