题目描述:
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
if(head ==null){
return false;
}
ListNode fast = head;
ListNode slow = head;
while(fast!=null&&fast.next!=null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}
这是一种利用快慢指针判断链表是否存在环的方法,
快指针每次前进两个next,慢指针每次前进一个next
- 如果存在环的话,就会形成一个类似追逐游戏的现象,当快指针的地址值等于慢指针的地址值时就会返回true
- 如果不存在环的话,fast会比slow先到达链表末尾,所以只判断fast指针和它的的next地址是否为空.在到达末尾的时候就会结束循环,并返回false
- 如果head为空链表的话,在方法开始判断是否为空,如果为空就会返回false