public static boolean hasCycle(ListNode head) {
int i = 0;
if (head == null) {
return false;
} else {
while (true) {
head = head.next;
if (head == null) {
return false;
}
i++;
if (i > 1000) {
return true;
}
}
}
}
对于单链表如果没有环,必有尾节点,所以一旦找到尾节点就返回false,当有环时,循环不会停止,设一个i用来判断,当i大于某一个大数时就返回true。但这样效率很低。
在判断单链表环时我们可以采用两个游标指针,一个快一个慢,如果存在环的话两个游标肯定会相遇,相遇时返回true,当循环结束时还没有相遇就说明没有环,返回false。
public static boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode late = head;
if (head == null) {
return false;
} else {
while(late!=null&&fast!=null){
late = late.next;
fast = fast.next;
if(late!=null){
late = late.next;
if(late == fast){
return true;
}
}
}
return false;
}
}