credo che quando hai istruzioni di questo tipo
codice:
if(s.equals(libri.getLibro(c).getTitolo())) b=true;
associate a NPE sia meglio dividere il punto in cui prendi le tue stringhe e poi le confronti (pena una variabile locale in più)
codice:
Libro tempLib = libri.getLibro(c); 
String titolo = tempLib.getTitolo();
if(s.equals(titolo)){
          b=true;
}
a questo punto sai quando si presenta l'errore chi è null (ho supposto che la tua collection sia valida).

Stabilizzato questo pezzo puoi anche raggrupparlo in un'unica istruzione come avevi fatto