--- title: '876. Middle of the Linked List' description: Given the head of a singly linked list, return the middle node of the linked list icon: dot topics: - { name: "Linked List", slug: "linked-list" } - { name: "Two Pointers", slug: "two-pointers" } issue: "https://github.com/prdlk/leetcode/issues/82" companies: - { name: "Google", period: "Thirty Days", frequency: 50.2 } - { name: "Meta", period: "Three Months", frequency: 49.8 } - { name: "Amazon", period: "Three Months", frequency: 39.1 } - { name: "IBM", period: "Six Months", frequency: 60.1 } - { name: "Microsoft", period: "Six Months", frequency: 37.9 } - { name: "Bloomberg", period: "Six Months", frequency: 25.5 } sidebar: label: 'Middle of the Linked List' badge: 'Easy' --- ### 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. ### Constraints: - The number of nodes in the list is in the range [1, 100]. - `1 <= Node.val <= 100` ## Solution ```py # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def middleNode(self, head: ListNode | None) -> ListNode | None: slow = fast = head while fast and fast.next: fast = fast.next.next slow = slow.next return slow ```