#### Problem: Middle of the Linked List

#### Description

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.

**Examples:**

**Input:**head = [1,2,3,4,5]**Output:**[3,4,5]**Explanation:**The middle node of the list is node 3.**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.

#### Solution in Python

```
class Solution:
def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
temp = head
while temp and temp.next:
head = head.next
temp = temp.next.next
return head
```

#### Explanation:

The solution uses the two-pointer technique, often known as the “slow and fast pointer” method. The `temp`

pointer moves twice for every single move of the `head`

pointer. By the time `temp`

reaches the end of the list, the `head`

pointer will be at the middle of the list. This approach effectively halves the traversal time, making it an efficient way to find the middle of a linked list.