Помогите найти ошибку уже замучалсо, итак прога: 
 Написать программу, составляющую по трем символьным файлам линейные упорядоченные по длине слов списки и функцию объединения списков. 
 Выдать объединенный список на экран.  Функцию объединения списков такую чтобы, 3 список был отсортирован слиянием по первым двум (как понимаете только это сделать не получается) 
 Язык С 
 неправильно работает функции PLNODE merge, помогите плизз 
 вот кот: 
 
Code
#include<stdio.h> 
 #include<windows.h> 
 #include<stdlib.h> 
 #include<string.h> 
 #define SIZE_OF_STRING 1000 
 #define SIZE_OF_word 100 
 typedef struct node //структура,экземпляр, указатель 
 { 
   char str[SIZE_OF_word]; 
   struct node *next; 
 }LNODE,*PLNODE; 
 PLNODE merge(PLNODE *top1,PLNODE *top2,PLNODE *top3) //обьединяем 3 списка в один 
 {     
   PLNODE cur3=*top3; 
   PLNODE cur=*top1; 
   PLNODE cur2=*top2; 
   int len_pre; 
   int len_new; 
   PLNODE newp; 
    
   for( ; ; ) 
   { 
       if((cur!=NULL)) 
           len_pre=strlen(cur->str); 
       if((cur==NULL) && ((cur2!=NULL))) 
           len_pre=len_new+1; 
       if((cur2!=NULL)) 
           len_new=strlen(cur2->str); 
       if((cur2==NULL) && ((cur!=NULL))) 
           len_new=len_pre+1; 
        
       if((cur==NULL) && (cur2==NULL)){ 
           return *top3; 
       } 
       if((len_pre!=0 && len_new==0)) { 
           cur2=cur2->next; 
           len_new=strlen(cur2->str); 
       } 
       if((len_pre==0 && len_new==0)) { 
           cur=cur->next; 
           cur2=cur2->next; 
           len_pre=strlen(cur->str); 
           len_new=strlen(cur2->str); 
       } 
       if((len_pre>len_new)) { 
           if(*top3!=NULL) { 
               *top3=cur2; 
               cur3=*top3; 
               cur3=cur3->next; 
           } 
           if(*top3==NULL) { 
               *top3=cur2; 
               cur3=*top3; 
               cur3=cur3->next; 
           }     
            
        
           cur2=cur2->next; 
       } 
       else { 
           if(*top3!=NULL) { 
               *top3=cur; 
               cur3=*top3; 
               cur3=cur3->next; 
           } 
           if(*top3==NULL) { 
               *top3=cur; 
               cur3=*top3; 
               cur3=cur3->next; 
           } 
           cur=cur->next; 
       } 
   } 
 } 
 void main(void) 
 { 
   FILE *file1; 
   FILE *file2; 
   
   file1=fopen("D:/abc.txt","rt"); 
   PLNODE top1; 
 ... 
   file2=fopen("D:/def.txt","rt"); 
   PLNODE top2; 
 ... 
   printf("\nlists 1+2\n===================\n"); 
    
   PLNODE top_1_2,topmerge=NULL,topmerge2=NULL; 
   top_1_2=merge(&top1,&top2,&topmerge); 
 } 
 
 большую часть программы пришлось снести - нет места