< Back




876. Middle of the Linked List

Given a singly linked list, return the middle element. Pretty straight forward with a fast and slow
pointer. If the fast pointer moves two nodes for every one node the slow pointer moves, then when the
fast pointer reaches the end of the list, the slow pointer will be at the middle node.

The solution is as follows:


  class Solution:
      def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
          slow, fast = head, head.next

          while fast:
              fast = fast.next
              if fast: fast = fast.next
              slow = slow.next

          return slow


_ Time Complexity:

  O(n) - We traverse all nodes within the linked list.

_ Space Complexity:

  O(1) - We maintain two pointers, slow and fast.