Python 3  ||  8 lines,  w/ example and brief explanation   ||   T/S:   96%  /  98%
Here\'s the plan: We move the fast pointer two nodes when possible for each node we move the the slow pointer.  When the fast pointer reaches the end of the lis
Here\'s the plan: We move the fast pointer two nodes when possible for each node we move the the slow pointer.  When the fast pointer reaches the end of the list, the slow pointer will be at the middle node.\n\n```\nclass Solution:\n    def middleNode(self, head: ListNode) -> ListNode:\n\n        if not head.next: return head  # Example: head = [1,2,3,4,5,6]\n\n        fast = slow = head.next        # Initialize fast and slow pointers\n        \n        while fast.next:\n            fast = fast.next           # move the fast pointer\n            \n            if fast.next:              # If possible, move both pointers\n                fast = fast.next\n                slow  = slow.next\n                \n        return slow                    # Example:  1->2->3->4->5\n                                       #           |\n                                       #          f&s\n\n                                       #           1->2->3->4->5 \n                                       #              |  |\n                                       #              f  s\n\n                                       #           1->2->3->4->5 \n                                       #                 |     |\n                                       #                 f     s\n                                \n                                       #          return 3->4->5\n```\n[https://leetcode.com/problems/middle-of-the-linked-list/submissions/1272792845/](https://leetcode.com/problems/middle-of-the-linked-list/submissions/1272792845/)\n\nI could be wrong, but I think that time is *O*(*N*) and space is *O*(1), in which *N* ~ number of nodes.
['Python']