Write a function `find_max(numbers)` that takes a list of integers and returns the largest integer in the list. If the list is empty, return `None`. You may not use the built-in `max()` function, but you can use any other Python features.
Constraints
Input is a list of integers. The list length is between 0 and 10^5. Each integer fits in a normal Python int.