已实现从链表中删除元素的方法:
public void remove(T e) {
Node<T> node = first;
Node<T> prevNode = null;
while(node != null){
if(e.equals(node)){
if(prevNode == null) {
first = node.next;
}
else {
prevNode.next = node.next;
}
size--;
}
else {
prevNode = node;
}
node = node.next;
}
}
如何正确实现按索引删除元素?使用remove方法的功能。
public void removeByIndex(int i) {
remove(i);
}
2条答案
按热度按时间bf1o4zei1#
这不是最有效的解决方案,而是使用
remove(T)
方法。你称之为get(i)
作为要删除的对象-即指定索引处的元素。注意:如果列表有重复的值,这个解决方案会有一些问题,但是在这种情况下,您不应该使用
remove(T)
方法。如果希望安全,请迭代到指定的索引:这样做:
当然,这只是一个粗略的实现。为了确保完全兼容,您应该检查索引是否有效,并使用
unlink(Node)
linkedlist的方法。linkedlist还有一个
remove(int)
方法:4nkexdtk2#
这样的方法应该有用:
在位置i之前找到节点。将该节点指向“over next”节点。
编辑原始代码示例充其量只是一个粗略的草图。更新了更完整的版本。
编辑#2
轻微改善:
从删除的节点清除链接
还处理双链接列表