Mi scuso se ho aperto 2 discussioni sulle liste a distanza di poco,ma ho ancora bisogno di un consiglio

codice:
node* duplica(node *l1)
{
node *p,*q,*t,*head,*tail;
head=NULL;int i=0;
if(l1==NULL) return NULL;


while(l1!=NULL){
    if(l1->data>5){
        p=newnode();
        p->data=l1->data;
        p->next=l1;
        p->next->next=NULL;
        if(head==NULL){head=p,tail=p;}
        else{tail->next=p;tail=tail->next;}}
    else{
    p=newnode();
        p->data=l1->data;
        p->next=NULL;
        if(head==NULL){head=p,tail=p;}
        else{tail->next=p;tail=tail->next;}}

    l1=l1->next;}

return head;

}
Vorrei duplicare il nodo 2 volte se è > di 5,e solo una volta se è < 5.Ma quando duplica un nodo doppio si ferma,chiude la lista (non da errore però),cosa dimentico?

Grazie in anticipo