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

基础实验3-2.3 共享后缀的链表 (25 分)_第1张图片
函数接口定义:
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;
List p2=L2;
/*用num1 num2 记录链表长度,
因为是共享后缀链表,所以应将
两个链表长度后对齐。
*/
    int num1=0,num2=0;
    while(p1)
    {
        p1=p1->Next;
        num1++;
    }
    while(p2)
    {
    p2=p2->Next;
        num2++;
    }     
p1=L1->Next;
p2=L2->Next;
//链表对齐,
    while(p2&&num1Next;
        num2--;
    }
    while(p1&&num1>num2)
    {
    p1=p1->Next;
        num1--;
    }

    while(p1&&p2)
    {
    if(p1->Data==p2->Data&&p1->Next==p2->Next) 
    /*当p1 p2指针指向的Data值相同时,
    再判断指针指向的下一个节点位置是否相同
    即可找到正确的起点位置。
    */
        return p1;
        p1=p1->Next;
        p2=p2->Next;
    }
    
return NULL;

}

你可能感兴趣的:(c语言)