基础实验3-2.3 共享后缀的链表 (25分)

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。

fig.jpg

函数接口定义:

PtrToNode Suffix( List L1, List L2 );
 

其中List结构定义如下:

typedef struct Node *PtrToNode;
struct Node {
    ElementType Data; /* 存储结点数据 */
    PtrToNode   Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
 

L1L2都是给定的带头结点的单链表。函数Suffix应返回L1L2的公共后缀的起点位置。

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;
}
原文地址:https://www.cnblogs.com/qinmin/p/12542562.html