链接列表 - 删除索引处的元素

时间:2013-04-11 20:42:41

标签: java linked-list

我正在为我的OOP类进行链接列表分配,并且使用remove方法遇到了一些问题。我们的教授要求我们写一个方法:

public Object removeElement(int index)

这需要一个索引,它是需要删除的元素的位置。它必须返回已删除节点包含的数据。但是,我在获取方法以返回正在删除的对象时遇到问题。由于某种原因,我不断得到该方法必须返回类型对象的结果的错误。我让它返回一个物体,我在各个地方经历了反复试验而没有成功。 这是我的代码:

 public Object removeElement(int index)
   {
   ListIterator iterator = listIterator();
   Object object;
   //If the supplied index is less than zero, throw an exception.
   if(index < 0)
   {
       IndexOutOfBoundsException ex = new IndexOutOfBoundsException();
       throw ex;
   }

   else
   {
       for(int i = 0; i <= index; i++)
       {
           if(!iterator.hasNext())
           {
               IndexOutOfBoundsException ex = new IndexOutOfBoundsException();
               throw ex;
           }
           else
           {
               if(i == index)
               {
                   object = iterator.next();
                   iterator.remove();
                   return object;
               }
               else
               {
                   iterator.next();

               }
           }
       }
   }

}

3 个答案:

答案 0 :(得分:3)

如果 i == index,您可以返回对象。但编译器不知道循环实际上总是在那一点结束。它正在查看循环的底部并思考“如果我们到达这里,我们想要返回什么?”

我实际上会将您的代码重组为:

if (index < 0)
{
    // No need for a separate variable
    throw new IndexOutOfBoundsException();
}

// No need for an else block
ListIterator iterator = listIterator();
Object current = null;
for (int i = 0; i <= index; i++)
{
    // Note: assuming you expose the size(), you could check this up front...
    if(!iterator.hasNext())
    {
        throw new IndexOutOfBoundsException();
    }
    current = iterator.next();
}
iterator.remove();
return current;

现在你总是调用remove并在你调用next()给定次数时返回,因为那是循环结束而不是异常的结束。

答案 1 :(得分:1)

首先不要使用java LinkedList中的迭代器它是Doubly linked list,我想教授想看看你如何实现LikedList数据结构的删除功能。

其次,在这个地方设置i+1 == index的循环和条件,保存当前元素以便返回Node returnElement = curent.next;并进行删除操作curent.next = curent.next.next;

答案 2 :(得分:0)

请发布listIterator()方法实现以及您收到的错误消息。 注意产品:&gt;您必须使用类变量(如整数)来管理列表的大小。所以你没有检查!iterator.hasNext(),而是将index与当前大小进行比较。