📝 Descrição

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.

📌 Exemplos

Exemplo 1

Entrada

head = [1,2,3,4,5]

Saída

[3,4,5]

✅ Casos de teste

Caso 1

Entrada

[1,2,3,4,5,6]

Saída

[4,5,6]

🚀 Como resolvi?

Para descobrir o meio de uma lista podemos utilizar física!

Distância percorrida pelo fast:

Distância percorrida pelo slow:

Como o fast percorreu a lista inteira, temos:

Portanto:

Ou seja, o slow estará no meio da lista.

🛠️ Implementação

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