此方法允许删除线性列表中的所有底片。我标记了我 100% 不理解的 if 循环。 所以这个方法会遍历整个列表。代码的其余部分完全有意义。但我遇到的唯一问题是为什么当 prev == null
时是 head = n.next
? 这是因为现在有两个“空格”而不允许吗? (两个空格,因为 prev = null
和 n
也必须为 null,因为它在 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){
的目的是检查当前元素(小于零)是否是列表的头部,这样你就可以知道如何删除它。
继续,如果当前元素不是列表的头部,则可以说前一个元素(相对于当前元素)之后的元素是当前元素之后的元素,因此小于零的元素不再是在列表中。