今天温习leetcode.141环形链表时报了个空指针的错,一直感觉逻辑没错误但最后发现了这个小问题,还是稍微注意以下的哈哈
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode slow = head,fast = head;
// while (fast != null && fast.next != null) {
while(fast.next!=null && fast!=null ){
slow = slow.next; // 慢指针每次移动一步
fast = fast.next.next; // 快指针每次移动两步
if (fast == slow) { // 如果两指针相遇,说明有环
return true;
}
}
return false; // 如果循环结束,则没有环
}
}
这上面设置了两个指针不断遍历若是有环的话就会相遇
报错如下
总的来说报错空指针是因为在Java中,逻辑与运算符是短路求值,这意味着如果前面的条件为false
,后面的条件将不会被执行,意味着若是当fast为空的情况下会去先检查fast.next
,就会导致访问空指针,从而抛出NullPointerException
。
同理:在项目中当我们判断传来的用户名时应该按下面顺序写,不然会报错空指针 @ — @
if (userName == null || userName.equals("")) {
return result.fail("用户名不能为空!")
}