Recursión - Eliminando Duplicados

Estoy trabajando en un método que elimina los duplicados de un elemento en un ArrayList, recursivamente. Pero tengo un pequeño problema, mi método funciona y elimina algunos elementos, pero no todos los duplicados.

Aquí está mi entrada:

100, 200, 200, 300, 400, 300, 100, 500, 500, 400, 100, 400, 100, 100

Y aquí está la salida:

100, 200, 300, 400, 100, 500, 100

Y mi método:

public static void removeDuplicates(ArrayList<Integer> list, int counter){
    if(list == null){
        throw new NullPointerException();
    }

    if(counter < list.size()){
        if(list.contains(list.get(counter))){
            list.remove(list.lastIndexOf(list.get(counter)));
        }
        removeDuplicates(list, ++counter);
    }
}

Entiendo que solo estoy eliminando el último elemento de dicho valor y luego iterando al siguiente. Me preguntaba cómo debería cambiar esto para eliminar todos los elementos que están duplicados. Además, una parte de mi salida que me confunde es que hay tres valores de '400', pero solo uno aparece en elsalida.

Gracias por la ayuda.

Respuestas a la pregunta(5)

Su respuesta a la pregunta