Vorrei chiedere 2 consigli su queste 2 liste in C
1)In questo codice vorrei ritornare il valore del quarto elemento sommato ai 3 precedenti se è maggiore,faccio un esempio

1-2-3-->7<--2-3-4-->5<--1-2-3-->9<----

ritorna 7 + 9
ma il codice mi da un errore che vi indico dove credo sia
codice:
int f (node *l1)
{
int z=0;
node *x,*k,*q,*p;

if(l1==NULL) return 0;
if(l1->next==NULL) return l1->data;
p=l1->next;
if(l1->next->next==NULL) return l1->data+p->data;

else{
    x=l1;k=l1->next;l1=l1->next->next;
    ----->while((x!=NULL) && (k!=NULL))<------   {
        if(l1->data>x->data+k->data) z=z+l1->data;

        x=x->next->next->next;
        k=k->next->next->next;

        l1=l1->next->next->next;}}
return z;
}

2)Ho una lista e vorrei far duplicare a coppie il prodotto degli elementi,faccio un esempio
1-2-3-4-5
2-12
e funziona,cosa devo mettere per stampare il 5 da solo

codice:
node* moltiplica(node *l1)
{
node *p,*k,*head,*tail;
head=NULL;int pos=1;
if(l1==NULL) return NULL;
else if(l1->next==NULL) return NULL;
while((l1!=NULL) && (l1->next!=NULL))  {k=l1;l1=l1->next;
  p=newnode();
  p->data=k->data*l1->data;
  p->next=NULL;
  if(head==NULL) {head=p,tail=p;}
  else{tail->next=p;tail=tail->next;}
  k=k->next;
  l1=l1->next;}

return head;}
Ultima cosa se volessi al posto invio chiudere la finistra ripetere l' azione cosa devo scrivere?