我想删除链表上传递给此方法的位置中的链接,但是它不起作用。我认为我的代码真的很糟糕,如果索引为 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();
}
}
}
错误是你count++;
,然后在你已经移动迭代器后检查它是大于还是等于索引。if(index==count)
不满意,您将始终以投掷异常击中else
执行以下操作:
while(iterator!=_lastLink && index != count){
count++;
iterator=iterator._next;
}
相反。这样,对于索引等于 0 时,您不会进入 while 循环,您可以进入if(index==count)
由于以下代码,当索引为 0 时,您会收到异常:
while(iterator!=_lastLink)
{
iterator=iterator._next;
count++;
if(count>=index)break;
}
索引 = 0 的逐行逐步执行。立即将计数增加到 1,然后中断。因此,当您点击比较index==count
时,它计算结果为0==1
这是假的。因此,它转到 else 并引发异常。
尝试将if(count>=index)break;
行放在第一位。
此外,您需要将第一个/头部引用更新为 0,这是一种特殊情况。