有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。
PtrToNode Suffix( List L1, List L2 ) {
List p1 = L1->Next;
List p2 = L2->Next;
List tmp = p1;
int len1 = 0, len2 = 0;
while(tmp) {
tmp = tmp->Next;
len1++;
}
tmp = p2;
while(tmp) {
tmp = tmp->Next;
len2++;
}
while(len1 > len2) {
p1 = p1->Next;
len1--;
}
while(len1 < len2) {
p2 = p2->Next;
len2--;
}
while(p1) {
if(p1 == p2) return p1;
else{
p1 = p1->Next;
p2 = p2->Next;
}
}
return NULL;
}