前言
『判断链表是否有环』是一道很经典的算法题了,算法题中的easy级别,必会算法题之一。
题目描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
要求:空间复杂度O(1)
问题分析
如果链表有环,那么链表中的指针都不会指向null;还有就是如果一个指针从链表头部开始遍历,因为环状结构的属性,指针最终会停留在环内
根据以上分析可知,如果链表没有环,那么指针走到尾部会为Null;如果有环,那么如果有一快一慢两个指针同时从头部出发,那么两者最终会在环内相遇
ps: 相遇点也很特殊,根据相遇点的位置可以找到链表中环的入口(根据数学公式可以推导出来),这也是常见的算法题之一,会在下一篇文章里解析。
AC代码
function hasCycle(head) {
// write code here
if (head == null) return false;
let fast = head, slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) return true;
}
return false;
}
总结
判断链表是否有环思路总结:如果链表有环,那么两个指针同时出发,快指针一次走两步,慢指针一次走一步,两者最终会相遇;否则快指针会走到Null
如果这篇文章对你有帮助,请
点赞+关注吧
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情