Java 循环链接列表删除方法不起作用

Java 循环链接列表删除方法不起作用,java,generics,generic-list,circular-list,Java,Generics,Generic List,Circular List,我的循环链接列表有问题。它是一个列表,当前由节点填充,每个节点包含MyPerson类的一个对象 我想做的是: 移除节点,比开始节点提前5步。它可以正常工作,直到我的列表只包含1个节点。然后,当调用randomStart()并试图打印列表时,它给了我这个错误 线程“main”java.lang.NullPointerException中的异常位于 cirkulærliste.CircularLinkedList.randomStart(CircularLinkedList.java:60) 在ci

我的循环链接列表有问题。它是一个列表,当前由节点填充,每个节点包含MyPerson类的一个对象

我想做的是:

移除节点,比开始节点提前5步。它可以正常工作,直到我的列表只包含1个节点。然后,当调用randomStart()并试图打印列表时,它给了我这个错误

线程“main”java.lang.NullPointerException中的异常位于 cirkulærliste.CircularLinkedList.randomStart(CircularLinkedList.java:60) 在cirkulærliste.Test.main(Test.java:98)

如果有人能看看我的循环链接列表类和测试类,那就太好了。:)


公共类循环链接列表除非我弄错了,否则没有理由这样做:

int size = 1;
Node<E> tempNode = cursor.getNext();
// NPE occurs here
while (!tempNode.getNext().equals(cursor.getNext())) {
    tempNode = tempNode.getNext();
    size++;
}

让我知道这是否有帮助

在编辑器中的行计数可能与在此处粘贴代码示例时不同。你能在发生错误的那一行添加注释吗?而(!tempNode.getNext().equals(cursor.getNext())没有想到这一点。。我对这个论坛有点陌生:)你完全正确,完全误解了这个问题。你可以为Node类添加源代码吗。或者说只有我遗漏了它?是的,我认为在使用remove方法后会出现空值,但我似乎看不到确切的位置。任何进一步的帮助都将不胜感激。我已经更新了我的答案!我相信这就是你想让remove()方法做的事?@thomastelmann你有没有尝试过在调试器中单步调用remove()?对不起,伙计们,我需要睡觉了。我现在再次启动,并会让你知道这是否有效。我尝试过实现你的删除方法,但它似乎也有缺陷。有时,它不会删除它返回的节点。我马上就去看看。我得煮咖啡
int size = 1;
Node<E> tempNode = cursor.getNext();
// NPE occurs here
while (!tempNode.getNext().equals(cursor.getNext())) {
    tempNode = tempNode.getNext();
    size++;
}
public Node<E> remove() {
    Node<E> tmpNode = start;
    if (size > 1) {
        // Move five nodes from the start
        for(int i = 0; i < 5; i++)
            tmpNode = tmpNode.getNext();

        // Move the start and cursor nodes if
        // they are about to be removed.
        if (tmpNode.equals(start))
            start = start.getNext();
        if (tmpNode.equals(cursor))
            cursor = cursor.getNext();

        // Remove the fifth node
        Node<E> next = tmpNode.getNext();
        Node<E> prev = tmpNode.getPrev();
        prev.setNext(next);
        next.setPrev(prev);

        size--;
    } else if (size == 1) {
        start = null;
        cursor = null;

        size--;
    }
    return tmpNode;
}