876. Middle of the Linked List
# O(n) time || O(1) space
def middle_node(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head.next:
return head
slow = fast = head
while fast and fast.next:
slow, fast = slow.next, fast.next.next
return slow
fast
pointer traverse two times faster than slow
,
so when fast
is done, slow
is in middle of lined list