当我将特定数据值作为参数时,我想知道在java中是否有办法找到节点的位置。例如,如果我想在链表中的特定对象之前或之后删除节点,我该怎么做?
由于
答案 0 :(得分:2)
LinkedList
的索引操作非常低效,这就是使用ListIterator
的原因。一旦找到了您要查找的项目,就可以向任意方向移动(这是ListIterator
优于Iterator
的主要优势)。
String search = ...;
LinkedList<String> list = ...;
for(
ListIterator<String> listIter = list.listIterator( );
listIter.hasNext();
listIter.next( )
)
{
String item = listIter.next( );
if ( item.equals( search ) )
{
if (listIter.hasPrevious())
{
listIter.previous( );
listIter.remove( );
listIter.next( );
}
if (listIter.hasNext())
{
listIter.next( );
listIter.remove( );
}
break;
}
}
答案 1 :(得分:1)
java.util.List的indexOf( Object o )
方法用于查找对象的索引。从那里,您应该能够在使用List的remove(index - 1)
。
当然,这假设您使用的链表实现了java.util.List接口。 (对于java的内置链表,这绝对是正确的。)
答案 2 :(得分:1)
您可以调用int i = list.indexOf(obj)
来获取对象的索引。然后只需使用list.remove(i-1)
删除之前的内容。
您应该添加边界检查,这样您就不会获得例外。