141. 环形链表

leetCode链表

快慢指针的思想

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
    if(head == null) return false
    // 定义快慢指针
    let slow = head
    let fast = head.next
    // 循环自己
    while(fast !== null && fast.next !== null) {
        // 如果快慢指针重合,说明有环,操作结束
        if (slow == fast) {
            return true
        }
        // 慢指针步长是1
        slow = slow.next
        // 快指针步长是2
        fast = fast.next.next
    }
    // 都循环完成就说明不是环形链表
    return false
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

最好这么写

/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
    if (head === null) return false
    let fast = head
    let slow = head
    while(fast !== null && fast.next !== null) {
        fast = fast.next.next
        slow = slow.next
        if(fast === slow) return true
    }
    return false
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
更新时间: 2022-03-25 17:04