如何解决Java中删除单向链表的节点
我在从 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。