Solution 1Floyd Cycle

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def hasCycle(self, head: Optional[ListNode]) -> bool:
        runner = chaser = head
        while runner:
            runner = runner.next
            if not runner:
                return False 
            runner = runner.next
            chaser = chaser.next
            if runner == chaser:
                return True
        return False
Leet Code/python.py · L1039–1056
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
public boolean hasCycle(ListNode head) {
    ListNode runner = head, chaser = head;
    while (runner != null && runner.next != null) {
        runner = runner.next.next;
        chaser = chaser.next;
        if (runner == chaser) {
            return true;
        }
    }
    return false;
}
Leet Code/java.java · L884–905
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
    let runner = head, chaser = head;
    while (runner && runner.next) {
        runner = runner.next.next;
        chaser = chaser.next;
        if ( runner === chaser ) {
            return true;
        }
    }
    return false;
};
Leet Code/javascript.js · L22–45
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */
function hasCycle(head): boolean {
    let runner = head;
    let chaser = head;
    while (runner && runner.next) {
        runner = runner.next.next;
        chaser = chaser.next;
        if ( runner === chaser ) {
            return true;
        }
    }
    return false;
};
// This code works too, flawlessly! But the type checking is giving an annoying false error
// function hasCycle(head: ListNode | null): boolean {
//     let runner: ListNode | null = head;
//     let chaser: ListNode | null = head;
//     while (runner && runner.next) {
//         runner = runner.next.next;
//         chaser = chaser.next;  // chaser will never be null in this line 
//         if ( runner === chaser ) {
//             return true;
//         }
//     }
//     return false;
// };
Leet Code/typesript.ts · L10–46