Eh lo so che a livello logico non ha senso, purtroppo anche il prof non ha senso logico

Questo è il programma che ho fatto, ma mi da lista vuota sia per lPositivi che per lNegativi:
codice:
#include<stdio.h>
#include<stdlib.h>

typedef struct nd{
   int val;
   struct nd *next;
}TLISTA;

TLISTA *newLista();
TLISTA *addLista(TLISTA *lista, int num);
void printLista(TLISTA *lista);
void dividi(TLISTA *lista, TLISTA *lPositivi, TLISTA *lNegativi);

int main()
{
   TLISTA *lInt;
   TLISTA *lPositivi;
   TLISTA *lNegativi;
   FILE *fp;
   int num;
   lInt=newLista();
   lPositivi=newLista();
   lNegativi=newLista();
   fp=fopen("dati.txt", "r");
   while(fscanf(fp, "%d", &num)!=EOF){
      lInt=addLista(lInt, num);
   }
   fclose(fp);
   printf("\n Lista 'lInt':\n\n");
   printLista(lInt);
   printf("\n\n Lista 'lPositivi':\n\n");
   dividi(lInt, lPositivi, lNegativi);
   printLista(lPositivi);
   printf("\n\n Lista 'lNegativi':\n\n");
   printLista(lNegativi);
   printf("\n\n");
   system("PAUSE");
   return 0;
}

TLISTA *newLista(){
   return NULL;
}

TLISTA *addLista(TLISTA *lista, int num){
   TLISTA *t;
   TLISTA *i;
   t=(TLISTA *)malloc(sizeof(TLISTA));
   if(t==NULL){
      printf("Errore di memoria!\n");
      exit(-1);
   }
   else{
      t->val=num;
      t->next=NULL;
   }
   i=lista;
   if(lista==NULL){
      return t;
   }
   else{
      while(i->next!=NULL){
         i=i->next;
      }
      i->next=t;
      return lista;
   }
}

void printLista(TLISTA *lista){
   if(lista==NULL){
      printf("lista vuota!\n");
   }
   else{
      while(lista!=NULL){
         printf("%4d", lista->val);
         lista=lista->next;
      }
   }
}

void dividi(TLISTA *lista, TLISTA *lPositivi, TLISTA *lNegativi){
   TLISTA *temp;
   temp=lista;
   while(temp!=NULL){
      if(temp->val>=0){
         lPositivi=addLista(lPositivi, temp->val);
      }
      else{
         lNegativi=addLista(lNegativi, temp->val);
      }
      temp=temp->next;
   }
}
sapreste dirmi dove può essere l'errore?