https://blog.csdn.net/qq_18873031/article/details/103215502
我的答案
PtrToNode Suffix( List L1, List L2 )
{
List p1=L1,p2=L2;
List t=L2;
while(p1->Next)
{
while(p2->Next)
{
if(p1->Next==p2->Next)
return p1;
p2=p2->Next;
}
p1=p1->Next;
p2=t;
}
return NULL;
}
出现的问题:
1.循环浪费时间,可能超时
2.答案错误,原因未知
参考网上的答案后重新整理思路
后缀的长度是相同的,那么只要从对齐两个单词的末尾,将两个单词的头部对齐,较长的可以切掉,再按位比较,p1->Next==p2->Next(因为共享的是地址)
修改后的代码
PtrToNode Suffix( List L1, List L2 )
{
List p1=L1,p2=L2;
int len1=0,len2=0;
while(p1->Next)
{
len1++;
p1=p1->Next;
}
while(p2->Next)
{
len2++;
p2=p2->Next;
}
p1=L1;
p2=L2;
if(len1>len2)
{
while(len1!=len2)
{
p1=p1->Next;
len1--;
}
}
else if(len1<len2)
{
while(len1!=len2)
{
p2=p2->Next;
len2--;
}
}
while(p1->Next)
{
if(p1->Next==p2->Next)
break;
p1=p1->Next;
p2=p2->Next;
}
return p1->Next;
}