gpt4 book ai didi

java - 迭代链表时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 06:02:24 26 4
gpt4 key购买 nike

代码背后的概念是删除列表中大于其之前元素的元素。在这种情况下,我的节点有一个 int 数据,并且可以通过它进行比较。 (这些类位于扩展 Comparable<>

问题是,当此代码与链接列表一起运行时,我收到 nullpointException:

 [2,5,4,3,7,6,4,2,3,4,5] 

应该获取的预期列表是

[2,2]

因为 (5 > 2) 删除 5,然后 (4 > 2) 删除 4,然后 (3 > 2) 删除 3 ...等等,直到它到达末尾并出现空指针异常。

另一个例子是列表

[3,1,-2,3,6,-1,3,2,1]

列表最终应该是

[3,1,-2]

其中的调试代码用于显示哪些元素被删除。

getter 方法是基础方法并且工作正常。

public void deleteIncrementing() {
T largest = null;

while(head.getNext() != null || head != null) {
Node<T> temp = head.getNext();

while(temp.getValue().compareTo(head.getValue()) > 0){
largest = temp.getValue();
remove(largest);
System.out.println(largest); // debug
if(temp.getNext() == null){
break;
}
temp = head.getNext();
}
head = temp;
}
}

源自建议的伪代码:

    Node<T> current = head;
Node<T> previous = null;

while(current != null) {
if (previous != null){
if (current.getValue().compareTo(previous.getValue()) > 0){
//System.out.println(current.getValue().toString());
remove(current.getValue());
}
if (current.getValue().compareTo(previous.getValue()) < 0){
//System.out.println(previous.getPrevious().getValue().toString());
//System.out.println(current.getValue().toString());
remove(previous.getValue());
}
}

previous = current;
current = current.getNext();
}

这仍然不正确,因为它没有考虑第一个到最后一个元素并附加最后一个元素......有什么原因吗?

最佳答案

对于初学者来说,这个条件:

while (head.getNext() != null || head != null)

应该是:

while (head != null && head.getNext() != null)

始终首先检查空值!

关于java - 迭代链表时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com