Innanzitutto, se anche vi sono degli oggetti nulli all'interno della lista, non è certo la riga 112 a dare problemi. Quella riga ritorna semplicemente il valore contenuto nella lista alla posizione i-esima, che sia nullo o meno. Diverso se è la lista stessa ad essere nulla, ma in quel caso il problema te lo ritrovi alla riga precedente, quando il for cerca di accedere al metodo size().
Se c'è la possibilità che un elemento della lista sia nullo, quello che va fatto è il controllo della non-nullità dell'oggetto ritornato prima di effettuare su di esso alcuna operazione:
codice:
for(int i=0; i<cibo.size(); i++) {
Cibo c2 = (Cibo) cibo.get(i); // Questa riga non dà alcun problema con gli elementi nulli
if (c2 != null) {
Point p = c2.getPos();
g.setColor(Color.black);
g.drawOval(p.x, p.y,
}
}
Poi, sei tu che decidi cosa fare nel caso in cui l'oggetto sia nullo... nell'esempio che ho postato io semplicemente si passa oltre, saltando l'eventuale elemento nullo.
PS: sono già diversi anni che sono stati introdotti i Generics (da Java 5... ora siamo alla 8). Sarebbe il caso di usarli. 
Ciao.