这个函数计算两个列表之间的差异。有办法吗? 刷新第二个列表,例如使用命令作为倒带(带文件)?
LINK diffIns(LINK lis,LINK lis2){
LINK p,head,tail;
head=NULL;
tail=NULL;
int trovato=0;
if(lis==NULL && lis2==NULL){return NULL;}
while(lis!=NULL){
trovato=0;
while(lis2!=NULL && trovato==0){
if(strcmp(lis->d.targa,lis2->d.targa)==0){
trovato=1;
}
else{
trovato=0;
}
lis2=lis2->next;
}
if(trovato==0){
p=newnode();
p->d=lis->d;
p->next=NULL;
if(head==NULL){head=p; tail=p;}
else{tail->next=p;tail=p;}
}
lis=lis->next;
}
return head;
}
答案 0 :(得分:0)
似乎你想在每次进入lis的下一个元素时从lis2的开头开始?如果是,那么
LINK diffIns(LINK lis,LINK lis2){
LINK p,head,tail;
LINK lis2Head = lis2; // <---
head=NULL;
tail=NULL;
int trovato=0;
if(lis==NULL && lis2==NULL){return NULL;}
while(lis!=NULL){
trovato=0;
while(lis2!=NULL && trovato==0){
if(strcmp(lis->d.targa,lis2->d.targa)==0){
trovato=1;
}
else{
trovato=0;
}
lis2=lis2->next;
}
if(trovato==0){
p=newnode();
p->d=lis->d;
p->next=NULL;
if(head==NULL){head=p; tail=p;}
else{tail->next=p;tail=p;}
}
lis=lis->next;
lis2 = lis2Head; // <--
}
return head;
}
这对你现有代码的影响小于上面保持lis2所在的建议,并使用新指针实际遍历第二个列表,但我同意上述帖子。我通常只在非常简单的函数中修改链表头指针参数。在更复杂的算法中,保持头部不变并使用新指针遍历列表。