Exception in thread "main" java.lang.NullPointerException

saludos
quisiera que me ayudaran a resolver este error que tengo en un programa que estoy desarrollando para la escuela
soy un novato en java y me he encontrado con un error muy particular que no logro comprender y mucho menos resolver
el error es el siguiente:

Exception in thread "main" java.lang.NullPointerException
at ListaDoble.eliminarDato(ListaDoble.java:79)
at ListaDoble.main(ListaDoble.java:96)

y el codigo es este:

import java.util.*;
public class ListaDoble{
Nodo primero,ultimo;
Scanner leer=new Scanner(System.in);
public ListaDoble(){
primero=null;
ultimo=null;
}
public void crearListaDoble(){
int num=1;
System.out.print("Dame tamaño de la lista ");
num=leer.nextInt();
for(int i=1;i<=num;i++){
System.out.println("Nombre");
String nom=leer.next();
System.out.println("Calificacion");
double cal=leer.nextDouble();
System.out.println("Edad");
int ed=leer.nextInt();
Alumnos lic = new Alumnos(nom,cal,ed);
primero = new Nodo(lic,primero);
if(i==0){
ultimo=primero;
}
}
}
public void recorrerListaDer(){
Nodo n=primero;
while (n!=null){
System.out.println("Nombre: " + n.alumnos.nombre);
System.out.println("Calificación: " + n.alumnos.calificacion);
System.out.println("Edad: " + n.alumnos.edad);
n=n.siguiente;
}
}
public void eliminarMayoresEdad(){
int a=17;
Nodo n=primero;
while (n!=null){
if(n.alumnos.edad >a){
System.out.println("Nombre: " + n.alumnos.nombre);
System.out.println("Calificación: " + n.alumnos.calificacion);
System.out.println("Edad: " + n.alumnos.edad);
}
n=n.siguiente;
}
}
public void eliminarDato(){
Nodo n=primero;
boolean encontrado=false;
Nodo m=primero;
double a=17;
double x;
while(m!=null){
if(a<=m.alumnos.edad){
a=m.alumnos.edad;
}
m=m.siguiente;
}
x=a;
while(n!=null&&encontrado==false){
encontrado=(x==n.alumnos.edad);
if(encontrado==false){
n=n.siguiente;
}
}
if(n!=null){
if(n==primero){
primero=n.siguiente;
if(n.siguiente!=null){
n.siguiente.anterior=null;
}
}else{
if(n.siguiente!=null){
n.anterior.siguiente=n.siguiente;
n.siguiente.anterior=n.anterior;
}else{
ultimo=n.anterior;
n.anterior.siguiente=null; //en esta linea es que me manda el error

}
n=null;
}
}
}

public static void main (String args[]) {
ListaDoble list = new ListaDoble();
System.out.println("Crear Lista");
list.crearListaDoble();
System.out.println("Recorriendo hacia la Derecha");
list.recorrerListaDer();
System.out.println("Eliminando menores de edad");
list.eliminarMayoresEdad();
System.out.println("Eliminando edad mayor");
list.eliminarDato();
list.recorrerListaDer();
}
}

El objetivo del programa es hacer una lista de alumnos utilizando nodos en la cual se almacene su nombre edad y calificacion.
El programa debe de mostrarme los alumnos, hacer un recorrido, eliminar los alumnos menores de edad y eliminar el alumno que tenga mas edad.
Todo va bien asta el punto en el que tengo que eliminar al alumno de mayor edad y es alli donde estoy atorado, si puedieran ayudarme se los agradeceria