java - 从链表中搜索并删除一个节点
问题描述
我正在使用链表而不使用集合类进行数据结构练习。在将元素值传递给函数后,我想从链表中删除一个元素
这是我写的函数。
public boolean remove(String s)
{
if(head.getName().equalsIgnoreCase(s))
{
head = head.getNext();
return true;
}
else
{
Node p =head;
Node current=p.getNext();
while(true) {
if(current == null || current.getName().equals(s)) {
break;
}
p = current;
current = current.getNext();
}
if (current == null)
{
p.setNext(current.getNext());
return true;
}
}
return false;
}
我正在使用节点 p 来存储前一个节点和当前节点。
代码位于 return false 部分,列表中没有变化。此外,我在p.setNext( current .getNext())中收到空指针异常警告。
请让我知道我在哪里犯错。
解决方案
关于空指针异常,这应该响起
if (current == null)
{
p.setNext(current.getNext());
return true;
}
current为 null 并且您正在尝试从中调用方法。
此外,您似乎没有处理极端情况,例如列表为空或只有一个元素。
推荐阅读
- r - 为什么替换将 noquote 文本更改为 R 中的字符串?
- java - 如何在java中将两个长值相乘
- c# - 如何以 Windows 形式重新创建此表?
- apache-kafka - 未指定默认 serdes 并使用自定义 serdes -> org.apache.kafka.streams.errors.StreamsException 时,KStream 上的映射操作失败
- vba - 导航时需要让 Excel 重新将过滤器应用到活动工作表
- php - Heroku 在第 4 行的 /app/index.php 中没有这样的文件或目录
- eslint - 是否有 ESLint 规则在作业上对齐 `=`
- google-cloud-storage - 如何使用应用引擎触发新训练数据的训练作业并在 Cloud ML 上部署新模型?
- php - php curl 响应显示 gzip 或编码数据
- docker - 如何在 Docker 容器中保留 go 1.11 模块?