if (p1->valore<minimo1)
{
minimo1=p1->valore;
}
p1=p1->succ;
altrimenti (tranne in alcuni casi particolari) crea un ciclo infinito!
Per scoprire errori come questi puoi (ad esempio) piazzare dei cout<< con un messaggio particolare lungo il codice, così sai sempre che istruzione stà eseguendo quando si blocca.
O puoi usare un debugger...