题干
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next
指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos
是 -1
,则在该链表中没有环。注意:pos
不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true
。 否则,返回 false
。
实例:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
复制代码
解法:双指针
链表中有环说明我们链表的某一个节点时会进入一个循环,这个节点时不确定的,但是我们可以定义两个指针,一前一后,快指针指向后两位节点,如果有环,那么快指针一般会在第二轮追上第一轮的满指针,总之他们一定会在一定的时间内重合;如果没有环,则指向尾节点,直到结束退出,返回false
代码:
执行用时:84 ms, 在所有 JavaScript 提交中击败了95.11%的用户
内存消耗:39.9 MB, 在所有 JavaScript 提交中击败了97.09%的用户
var hasCycle = function (head) {
// 首先判断链表是否有值或者只有一个值时返回false
if (head == null || head.next == null) return false
let index1 = head;
let index2 = head.next;
// 第三个判断是为了防止,我们只有俩个元素,而且没有环时,那么在next就会报错
while (index1 != null && index2 != null&&index2.next!=null) {
index1 = index1.next
index2 = index2.next.next
if (index2 == index1) {
return true
}
}
return false
};
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END