【发布时间】:2011-11-04 01:44:45
【问题描述】:
我想知道当我将特定数据值作为参数时,java 中是否有办法找到节点的位置。例如,如果我想删除链表中特定对象之前或之后的节点,我该怎么做?
谢谢
【问题讨论】:
标签: java linked-list
我想知道当我将特定数据值作为参数时,java 中是否有办法找到节点的位置。例如,如果我想删除链表中特定对象之前或之后的节点,我该怎么做?
谢谢
【问题讨论】:
标签: java linked-list
索引操作对于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;
}
}
【讨论】:
java.util.List 的indexOf( Object o ) 方法用于查找对象的索引。从那里,您应该能够使用 List 的 remove(index - 1) 删除之前的对象。
当然,这是假设您使用的链表实现了 java.util.List 接口。 (对于java的内置链表来说绝对是这样。)
【讨论】:
您可以调用int i = list.indexOf(obj) 来获取对象的索引。然后只需使用list.remove(i-1) 删除之前的即可。
您应该添加边界检查,以免出现异常。
【讨论】: