Given the head of a singly linked list, return the middle node of the linked list.
If there are two middle nodes, return the second middle node.
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.
To find the middle point, we take two pointers, and increment one twice as fast as the slow pointer. Where the slow pointer ends up is the middle point.
class Solution:
def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
= head
slow = head
fast
while slow and fast and fast.next:
= slow.next
slow = fast.next.next
fast
return slow