思路很容易想出来,用快慢指针,如果是环形快慢指针会相遇,如果不是则快指针先指向null;
注意条件设置,防止出现空指针异常
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null)
return false;
ListNode p1 = head, p2 = head;
while(p2 != null){
p1 = p1.next;
if(p2.next == null){
return false;//如果指针指向null,没有必要继续了一定不是环形
}else {
p2 = p2.next.next;
}
if(p1 == p2)
return true;//相遇则是环形
}
return p1 == p2;
}