问题描述
我在从 Java 单链表中删除节点时遇到问题。我有一个列表,其中包含整数数据,我需要删除所有节点,其值可以除以除以四。我还需要移动头指针和尾指针,以防头或尾元素被删除。我为此编写了方法,大部分时间它都按照我的需要工作,但有时它会抛出 NullPointerException。我该如何解决?这是我的代码:
public void delete(){
Node temp = head,prev = null;
if (temp != null && temp.data % 4 == 0)
{
head = temp.next;
temp = head;
}
while (temp.next != null)
{
if (temp.data % 4 != 0) {
prev = temp;
temp = temp.next;
}
else {
prev.next = temp.next;
temp = prev.next;
}
}
if (tail.data % 4 == 0) {
tail = prev;
tail.next = null;
}
}
解决方法
while (temp.next != null)
:temp 可能为空。还有一些小问题。
这是因为太复杂了。
public void delete() {
Node prev = null;
for (Node temp = head; temp != null; temp = temp.next) {
if (temp.data % 4 == 0) {
if (prev == null) {
head = temp.next;
} else {
prev.next = temp.next;
}
} else {
prev = temp;
}
}
tail = prev;
}
- 以上将
prev
设置为 valid 上一个节点。 - 删除考虑从 head 或 prev.next 删除。
-
tail
更新到最后一个元素。
在你的 while 条件中再添加一个空检查:
while (null != temp && null != temp.next)