Il problema avviene nella linea

codice:
   while (T1->punt || T2->punt != NULL)
in conseguenza di un'assegnazione non corretta di T1 o T2 ...

Ma non so cosa dirti perche' prima vorrei capire a cosa serve questa parte di codice ...

codice:
   T1=&q;    //Assegno T1 come indice al posto di 'q' (T1 = puntatore a LISTA)
    T2=&p;
    if (p.num >= q.num)
                      {
                       lista *coda = new lista;  //crea coda della LISTA
                       coda->num=q.num;
                       coda->punt=NULL;
                       T1=T1->punt;       
                       y=coda;
                      }
                      else
                      {
                       lista *coda = new lista;  //crea coda della LISTA
                       coda->num=p.num;
                       coda->punt=NULL;
                       T2=T2->punt;
                       y=coda;  
                      }
Dire che il codice e' abbastanza confuso, e' un eufemismo ...