LeetCode141 链表是否存在环
程序员文章站
2022-06-17 18:46:02
...
快慢指针
:quick指针域slow指针
,快指针一次走两步,慢指针一次走一步,若在一个时刻quick=slow
则说明存在环,想象以下,同一赛道上两个运动员速度不一样但是一直跑,会相遇吗?
package CLinkedList;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/4/9 0009 00:23
*/
public class Problem141 {
//若存在环则最终快慢指针钟会相遇,若不存在环则块指针一定会走到链表尾部
//想象一下,两名运动员以不同的速度在环形赛道上跑步会发生什么?
//通过使用具有 不同速度 的快、慢两个指针遍历链表,
// 空间复杂度可以被降低至 O(1)O(1)。慢指针每次移动一步,而快指针每次移动两步。
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null) return false;
//定义快慢指针
ListNode slow = head;
ListNode quick = head.next;
//
while(quick.next!=null&&quick.next.next!=null){
if(quick==slow) return true;
//更新快慢指针
quick=quick.next.next;
slow=slow.next;
}
return false;
}
}