-1

我想删除传递给此方法的链表上位置中的链接,但是它不起作用。我认为我的代码真的很糟糕,如果索引为 0,那么我认为它会给我一个错误:

public void remove(int index)
{
    DLink iterator=_firstLink;
    int count=0;

    while(iterator!=_lastLink)
    {
         iterator=iterator._next;
         count++;
         if(count>=index)break;
    }
    if(index==count)
    {
        iterator._previous = iterator._next;

        _size--;

    } 
    else
    {
        try 
        {
            throw new Exception("IndexOutOfBoundException");
        } 
        catch (Exception e1) 
        {
            e1.printStackTrace();
        }
    }
}
4

2 回答 2

1

错误是您在移动迭代器count++;检查它是否大于或等于索引。不满意,你总是会遇到 throw异常
if(index==count)else

执行以下操作:

while(iterator!=_lastLink && index != count){  
   count++;  
   iterator=iterator._next;  
}

反而。这种方式索引等于 0 你不进入 while 循环,你可以进入if(index==count)

于 2013-09-08T18:39:43.263 回答
0

由于以下代码,当 index 为 0 时,您会遇到异常:

while(iterator!=_lastLink)
{
     iterator=iterator._next;
     count++;
     if(count>=index)break;
}

在 index = 0 的情况下逐行执行。您立即将计数增加到 1,然后中断。所以当你点击比较时index==count,它会评估0==1哪个是假的。因此,它转到 else 并引发异常。

试着把if(count>=index)break;线放在第一位。

此外,您需要将您的第一个 / 头引用更新为 0,这是一种特殊情况。

于 2013-09-08T18:42:28.637 回答