题目描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
思路
双指针做法 --快慢指针
快指针fast,慢指针slow
快指针fast每次走2步,慢指针一次走一步
如果fast 和slow指针在途中相遇说明这个链表有环
为什么fast指针走两个节点,slow走一个节点,有环的话一定会在环内相遇?
fast走两步,slow走一步。
继续循环
fast走两步到了环的位置,接着执行,fast指针和slow指针相遇了。
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;
}
}