java - 有人可以解释这个 if-loop 的方法来删除线性列表中的否定吗?
问题描述
此方法允许删除线性列表中的所有否定。我标记了我不理解的 if-loop 100%。所以这个方法遍历整个列表。其余代码完全有意义。但我唯一的问题是为什么是head = n.next
什么时候prev == null
?这是因为现在有两个“空格”而且这是不允许的吗?(两个空格,因为prev = null
并且n
也必须为空,因为它在 if 循环中跳转为负数)
ListNode prev = null;
ListNode n = head;
while (n != null) {
if (n.val < 0) {
if (prev == null) { //this if- loop i don´t understand
head = n.next;
}
else {
prev.next = n.next;
}
}
else {
prev=n;
n = n.next;
}
}
解决方案
首先if
不是循环,它是用于条件分支的语句。
因此,从 开始if (n.val < 0)
,检查当前元素是否小于零,如果是,则检查当前元素之前的元素是否为null
。如果是,则意味着您当前的元素是列表的头部,并且它的值小于零,因此您要删除它。所以你要做的只是让列表的头部成为当前头部之后的元素。
所以 的目的if (prev == null){
是检查当前元素(小于零)是否是列表的头部,这样你就可以知道如何删除它。
继续前进,如果当前元素不是列表的头部,您只会说前一个元素(相对于当前元素)之后的元素是当前元素之后的元素,因此小于零的元素不再在列表中.
推荐阅读
- javascript - 递增运算符与循环中的 i + 1
- qt - 为什么 QSqlDatabase::drivers() 在 Qt 共享库项目中使用时为空?
- node.js - 如何将我的交易部署到 eth 网络?我将我的系统终端与 infura 主网一起使用,但它似乎不起作用。在我的本地工作
- rust - Rust lifetime confusion
- r - 关于 R 代码的 cph 错误的问题:找不到对象“n”
- linux - 什么是 OpenIPMI 以及如何使用它?
- android - 模拟方法响应
- ruby-on-rails - Heroku Rails:“如果您是应用程序所有者,请查看日志以获取更多信息。”
- python - 我无法使用 pygame 添加图像
- python - 如果有更新,我如何获取多对多字段的上一个数据