Java 循环链接列表删除方法不起作用
我的循环链接列表有问题。它是一个列表,当前由节点填充,每个节点包含MyPerson类的一个对象 我想做的是: 移除节点,比开始节点提前5步。它可以正常工作,直到我的列表只包含1个节点。然后,当调用randomStart()并试图打印列表时,它给了我这个错误 线程“main”java.lang.NullPointerException中的异常位于 cirkulærliste.CircularLinkedList.randomStart(CircularLinkedList.java:60) 在cirkulærliste.Test.main(Test.java:98) 如果有人能看看我的循环链接列表类和测试类,那就太好了。:)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
公共类循环链接列表除非我弄错了,否则没有理由这样做:
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;
}