给定一个链表,判断它是否有环。
两个指针,a每次后移1,b移动2,那么a走完全程,如果存在环,b必然和a至少相遇一次,如果遍历完仍然没有相遇,则无环.
public class Solution {
/**
* @param head: The first node of linked list.
* @return: True if it has a cycle, or false
*/
public boolean hasCycle(ListNode head) {
// write your code here
if(head==null){
return false;
}else{
ListNode a=head;
ListNode b=head;
while(a!=null){
a=a.next;
if(b==null){
return false;
}else if(b.next==null){
return false;
}else{
b=b.next.next;
if(a==b){
return true;
}
}
}
}
return false;
}
}
public class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
this.next = null;
}
}