首页 > 解决方案 > 有人可以解释这个 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;
        }
    }

标签: java

解决方案


首先if不是循环,它是用于条件分支的语句。

因此,从 开始if (n.val < 0),检查当前元素是否小于零,如果是,则检查当前元素之前的元素是否为null。如果是,则意味着您当前的元素是列表的头部,并且它的值小于零,因此您要删除它。所以你要做的只是让列表的头部成为当前头部之后的元素。

所以 的目的if (prev == null){是检查当前元素(小于零)是否是列表的头部,这样你就可以知道如何删除它。

继续前进,如果当前元素不是列表的头部,您只会说前一个元素(相对于当前元素)之后的元素是当前元素之后的元素,因此小于零的元素不再在列表中.


推荐阅读