自定义链接列表的删除方法有问题

时间:2017-03-20 04:44:14

标签: java linked-list

我正在编写自己的链接列表,并且我在重复删除(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,

我做错了什么?我无法调试我的代码。所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

你减小了两次大小。您在函数调用中减小大小,该函数调用采用类型E的对象以及采用索引的函数。因此,在打印时,将跳过最后一个节点。