[路飞]_LeetCode141.环形链表

162 阅读1分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

LeetCode 141. 环形链表

题目要求
给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。
示例

思路

用快慢指针,如果两个指针相遇说明这个链表是有节点的

1.声明两个变量(指针)
let slow = head;
let fast = head;
2.当慢指针 快指针和快指针的下一个节点有值的时候就分别向后走一步,没有值的时候就说明这个指针没有环
while (slow && fast && fast.next) {  
    slow = slow.next;  
    fast = fast.next.next;
}
return false;
3.当快指针没有值的时候,说明已经走完了所有节点,并且没有环
if (fast != null) return false; 
4.当快慢指针相等的时候,说明有环

快指针一次走两步,慢指针一次走一步,如果有环,快指针终究可以追上慢指针;

if (fast == slow) return true;

完整代码

var hasCycle = function(head) {    
    let slow = head;    
    let fast = head;    
    while (slow && fast && fast.next) {        
        slow = slow.next;        
        fast = fast.next.next;        
        if (fast == null) return false;        
        if (fast == slow) return true;    
    }    
    return false;
};