ho notato che questo plist *p viene usato per la modifica della lista ti copio un pezzetto di codice

codice:
// funzione per inserire in testa ad una lista un nuovo nodo
void inserisciInTesta(plist* l, char n){
 plist temp = (plist)malloc(sizeof(elist));
 temp->info = n;
 temp->next = *l;
 *l = temp;
}

//funzione per inserire in coda ad una lista un nuovo nodo
void inserisciInCoda(plist* l, int n){
 plist temp = (plist)malloc(sizeof(elist));
 temp->info = n;
 temp->next = NULL;
 if (*l == NULL) *l = temp;
 else {
     plist temp2 = *l;
     while (temp2->next != NULL)
           temp2 = temp2->next;
     temp2->next=temp;
  }
}

mentre appare plist p quando ,per esempio, deve stampare su video o fare delle operazioni che non modificano la lista

codice:
int confrontaDNA(plist L1, plist L2, int t) {
int DIM1 = lungLista(L1);  
int DIM2 = lungLista(L2);

t = t - abs(DIM1-DIM2);

while ((t >= 0) && ((L1!=NULL) && (L2!=NULL))) {
      if (L1->info != L2->info) t--;       
      L1 = L1->next; L2 = L2->next;
      }
return (t >= 0);
    
}

inizio a pensare questo plist *p, essendo un puntatore di un puntatore sia necessario per la modifica della lista...
e che quindi non basti scrivere plist p