我正在编写自己的链接列表,并且我在重复删除(E obj)方法时遇到错误。虽然它删除了我想要的对象,但它也删除了列表中的最后一个对象。当我想要它删除最后一个对象时,它会删除它,但也会删除它的倒数第二个。我不太清楚出了什么问题。 My Linked列表使用int变量来跟踪大小和两个辅助方法indexOf(E obj)和getNode(int index)。以下是我的删除方法:
showModal = () => {
if(this.state.preview) {
return (
<Modal />
);
} else {
return null;
}
}
render() {
return (
<SampleComponent />
{ this.showModal() }
);
}
这些是我用作辅助方法的indexOf和getNode方法。
public E remove(int index)
{
if(index > 0 && index < size)
{
Node<E> temp = getNode(index);
getNode(index - 1).setNext(getNode(index + 1));
size--;
return temp.getValue();
}
else if(index == 0)
{
Node<E> temp = getNode(0);
head.setNext(getNode(1));
size--;
return temp.getValue();
}
return null;
}
public boolean remove(E obj)
{
if(!contains(obj))
return false;
int index = indexOf(obj);
remove(index);
size--;
return true;
}
我有一个测试人员文件,这是当前文件中的代码:
private int indexOf(E obj)
{
int index = 0;
Node<E> n = head.getNext();
while(n != null)
{
if(!n.getValue().equals(obj))
index++;
else
return index;
n = n.getNext();
}
return -1;
}
private Node<E> getNode(int index)
{
Node<E> n = head.getNext();
for(int i = 0; i < index; i++)
{
n = n.getNext();
}
return n;
}
打印方法可以正常工作,但这里只是为了以防万一。
a.add(1);
a.add(2);
a.add(3);
a.add(4);
a.add(5);
a.remove(new Integer(3));
print(a);
所以上面的代码打印出以下内容:1,2,4,
当我删除整数5而不是3时,它会打印:1,2,3,
我做错了什么?我无法调试我的代码。所有帮助表示赞赏!
答案 0 :(得分:1)
你减小了两次大小。您在函数调用中减小大小,该函数调用采用类型E的对象以及采用索引的函数。因此,在打印时,将跳过最后一个节点。