141. 环形链表

题目链接:https://leetcode-cn.com/problems/linked-list-cycle/

思路:可能初学者想不到这个方法,就是用「快慢指针」,快指针每次走2步,慢指针每次走1步,如果链表有环必然两者会相遇。打个比方,A和B在同一个环形操场中同一方向跑步,A比B快,一开始A远远超过B,过了一段时间由于A跑的比B快了一圈,然后两者再次相遇。

注意要考虑极端情况,没有节点或者只有一个节点是不存在「环」的。

var hasCycle = function(head) {
    let fast = head;
    let slow = head;
    
    while(slow !== null && fast !== null && fast.next !== null) {
// 注意判断条件,slow !== null && fast !== null确保链表有节点,
// fast.next !== null确保至少有1个节点
        slow = slow.next;
        fast = fast.next.next;
        if(slow === fast) {
            return true;
        }
    }
    
    return false;
    
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。