[Python] - Two Pointer (Slow, Fast) Pointer - Clean & Simple solution
Approach \n- Here, we are incrementing Slow and Fast both.\n- Only difference is we are increasing slow by 1 and fast by 2 so we when we reach at end slow will 
# Approach \n- Here, we are incrementing Slow and Fast both.\n- Only difference is we are increasing slow by 1 and fast by 2 so we when we reach at end slow will be at the mid of the linked list\n- So, Simply we can return it.\n\n- This can be also used to [Detact Cycles in Linked List](https://leetcode.com/problems/linked-list-cycle).\n\n# Complexity\n- Time complexity: $$O(n)$$\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity: $$O(1)$$\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\n# Definition for singly-linked list.\n# class ListNode:\n#     def __init__(self, val=0, next=None):\n#         self.val = val\n#         self.next = next\nclass Solution:\n    def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:\n        slow = fast = head\n        while fast and fast.next:\n            slow = slow.next\n            fast = fast.next.next\n        return slow\n\n```
['Linked List', 'Two Pointers', 'Python3']