基础实验3-2.3 共享后缀的链表 (25分)
有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。
函数接口定义:
PtrToNode Suffix( List L1, List L2 );
其中List
结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1
和L2
都是给定的带头结点的单链表。函数Suffix
应返回L1
和L2
的公共后缀的起点位置。
PtrToNode Suffix( List L1, List L2 ) { List p1 = L1->Next; List p2 =L2->Next; int len1=0,len2 =0; List tmp = p1; while (tmp)//表1长度 { tmp = tmp->Next; len1++; } tmp = p2; while(tmp)//the length of List2 { tmp = tmp->Next; len2++; } while(len1>len2)// { p1 = p1->Next; len1--; } while(len1<len2) { p2 = p2->Next; l2n2--; } while (p1)//find the same Node; { if(p1==p2) return p1;//return the pointer of the node whitch have the same address else { p1 = p1->Next; p2 = p2->Next; } } return NULL; }