【问题标题】:Find node from value in linkedlist从链表中的值中查找节点
【发布时间】:2011-11-04 01:44:45
【问题描述】:

我想知道当我将特定数据值作为参数时,java 中是否有办法找到节点的位置。例如,如果我想删除链表中特定对象之前或之后的节点,我该怎么做?

谢谢

【问题讨论】:

    标签: java linked-list


    【解决方案1】:

    索引操作对于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;
      }
    }
    

    【讨论】:

      【解决方案2】:

      java.util.List 的indexOf( Object o ) 方法用于查找对象的索引。从那里,您应该能够使用 List 的 remove(index - 1) 删除之前的对象。

      当然,这是假设您使用的链表实现了 java.util.List 接口。 (对于java的内置链表来说绝对是这样。)

      【讨论】:

        【解决方案3】:

        您可以调用int i = list.indexOf(obj) 来获取对象的索引。然后只需使用list.remove(i-1) 删除之前的即可。

        您应该添加边界检查,以免出现异常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-16
          • 1970-01-01
          • 2016-03-11
          • 2016-08-13
          • 2016-09-15
          相关资源
          最近更新 更多