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

继续,如果当前元素不是列表的头部,则可以说前一个元素(相对于当前元素)之后的元素是当前元素之后的元素,因此小于零的元素不再是在列表中。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!