法一(暴扫)(嵌套循环)
Lisklist search(Lisklist str1,Lisklist str2)
{
p=str1->next,q=str2->next;
while(p){
p=p->next;
while(q){
if(q->data==p->data)return q;
q=q->next;
}
q=str2->next;
}
if(!p)return 0;
}
法二(时间复杂度很小只需要遍历一次)
int lengthlist(Lisklist str)
{
Lisklist p=str->next;
int count=1;
while(p){
count++;
p=p->next;
}
return count;
}
Lisklist searchlist(Lisklist str1,Lisklist str2)
{
int k;
Lisklist p,q;
if(lengthlist(str1)<lengthlist(str2))k=lengthlist(str2)-lengthlist(str1);
for(q=str2->next;k>0;k--)
q=q->next;
else{
for(p=str1->next;k>0;k--)
p=p->next;
}
while(p&&q){
if(p->data==q->data)return q;
else{
p=p->next;
q=q->next;
}
}
if(p==NULL||q===NULL)return NULL;
}