876. Middle of the Linked List (Easy) (https://leetcode.com/problems/middle-of-the-linked-list/)

Given the head of a singly linked list, return the middle node of the linked list. If there are two middle nodes, return the second middle node.

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 middleNode(head: ListNode | null): ListNode | null {
  // Floyd's slow/fast pointers
  let slow = head;
  let fast = head;
 
  while (fast !== null && fast.next !== null) {
    slow = slow!.next;
    fast = fast.next.next;
  }
 
  return slow;
}
 
// Local check:
function toList(arr: number[]): ListNode | null {
  if (arr.length === 0) return null;
  const head = new ListNode(arr[0]);
  let cur = head;
  for (let i = 1; i < arr.length; i++) {
    cur.next = new ListNode(arr[i]);
    cur = cur.next;
  }
  return head;
}
 
function toArray(node: ListNode | null): number[] {
  const out: number[] = [];
  while (node !== null) {
    out.push(node.val);
    node = node.next;
  }
  return out;
}
 
console.log(toArray(middleNode(toList([1, 2, 3, 4, 5]))));
console.log(toArray(middleNode(toList([1, 2, 3, 4, 5, 6]))));
Example 1:
 
    Input: head = [1,2,3,4,5]
    Output: [3,4,5]
    Explanation: The middle node of the list is node 3.
 
  Example 2:
 
    Input: head = [1,2,3,4,5,6]
    Output: [4,5,6]
    Explanation: Since the list has two middle nodes with values 3 and 4, we return the second one.

linked-list 141 — тот же fast & slow pointer patterns leetcode