1.判断链表是否有环
思路:使用快慢指针解决是否有环
假设链表是一个有环链表,设置两个指针,slow,和fast让两个指针从前往后遍历,而且fast的遍历速度是slow的两倍,如果有环的话,遍历快的fast的不会为null,并且slow一定会追上fast,fast会和slow相等,过程如下图所示:fast走两步,slow走一步
代码:
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(slow != null && fast != null){
fast = fast.next;
if(fast != null){
fast = fast.next;
slow = slow.next;
}
if(fast == slow){
return true;
}
}
return false;
}