PTA数据结构链表共享后缀的链表

需要考虑:有无交集;有多个字符相同,但只有最后两个是公共的;有一个单词为空;全相等;

汇总网上代码,解析如下:

首先求出len1和len2,若len1>len2,令p1指向链表中的第len1-len2+1个结点,若len2>len1,令p2指向链表中的第len2-len1+1个结点 ,然后将指针P1和p2同步向后移动,直到P1和p2指向同一结点,再比较接下来的几个节点

PtrToNode Suffix( List L1, List L2 )
{
    List P1,P2;
    P1=L1->Next;
    P2=L2->Next;
    int len1=0,len2=0;
    while(P1)//求链表1的长度 len1
    {
        len1++;
        P1=P1->Next;
    }
    while(P2)                          //求链表2的长度 len2
    {
        len2++;
        P2=P2->Next;
    }
    for(P1=L1;len1>len2;len1--)       //若len1>len2,令p1指向链表中的第len1-len2+1个结点
        P1=P1->Next;
    for(P2=L2;len2>len1;len2--)      //若len2>len1,令p2指向链表中的第len2-len1+1个结点
        P2=P2->Next;
    while(P1->Next!=P2->Next)
    {
                                    /*将指针P1和p2同步向后移动, 直到P1和p2指向同一结点 */
        P1=P1->Next;
        P2=P2->Next;
    }
    return P1->Next;
}

原文地址:https://www.cnblogs.com/hzy-bwd/p/11565872.html

时间: 2024-08-30 16:44:19

PTA数据结构链表共享后缀的链表的相关文章

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

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上.为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀.下图给出了单词“loading”和“being”的存储形式.本题要求你找出两个链表的公共后缀. 函数接口定义: PtrToNode Suffix( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */

查找两个单词链表共同后缀的起始结点

描述 假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀空间.例如,"loading"和"being"的存储映像如下图所示: 设str1和str2分别指向两个单词所在单链表的头结点,请实现一个时间上尽可能高效的算法,找出由str1和str2所指的两个链表共同后缀的起始位置的结点,输出该结点对应的字符(如图中的字符i) 输入 多组数据,每组数据有三行,第一行为链表str1和str2的长度n和m,第二行为链表str1的n个元素,第三行为链表s

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

数据结构Java实现04----循环链表、仿真链表

数据结构Java实现04----循环链表.仿真链表 单向循环链表 双向循环链表 仿真链表 一.单向循环链表: 1.概念: 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环. 和单链表相比,循环单链表的长处是从链尾到链头比较方便.当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表. 和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作时,算法实现较为

数据结构Java实现03----单向链表的插入和删除

数据结构Java实现03----单向链表的插入和删除 文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构:            概念: 链式存储结构是基于指针实现的.我们把一个数据元素和一个指针称为结点.   数据域:存数数据元素信息的域. 指针域:存储直接后继位置的域. 链式存储结构是用指针把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来.链式存储结构的线性表称为链表. 链表类型: 根据链表的构造方式的不同可以分为: 单向链表 单向循环链表 双向循环链表 二

数据结构C语言实现——线性链表

declaration.h #ifndef DECLARATION_H_INCLUDED #define DECLARATION_H_INCLUDED #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define ElemType int typedef ElemType* Triplet; typedef int Status; type

"数据结构翻转课堂"答疑实录——链表

[说明] 本文是<数据结构>翻转课堂在线答疑的实录,由云班课的"答疑/讨论"功能中导出数据整理而成. [重要提示] 下面的内容,按时间从后往前的顺序提供,请直接到文章末尾,倒着看更顺畅. [知识点答疑] 赵鹤2015-09-21 16:38:25 头插法为什么首节点不是后来插入的节点 贺利坚2015-09-21 17:13:56 后加入的成头了. 赵鹤2015-09-21 17:26:04 可是首节点并没有数据域? 贺利坚2015-09-21 18:45:32 先区分下,首

数据结构与算法分析—— 1、链表

链表是一种最简单的数据结构,当我们在使用数组存储数据的时候,频繁的插入和删除会损耗大量的性能,而链表正是一种适合频繁插入删除操作的线性数据结构. 有关链表的详细介绍可以看这里,通俗的来说,链表就是由一些节点构成,每个节点有一个指针,这个指针保存着下一个节点的位置.因此,链表就是由指针将这些物理上没有逻辑关系的节点连接了起来,构成一个有关系的线性表. 我们先来看“单链表”,在C语言当中,具有封装能力的数据类型是结构体.因此,我们用一个结构体来表示一个节点.定义如下: 1 struct Node{

【数据结构】两个单循环链表的连接操作

如果在单链表或头指针表示的链表上操作这个比较消耗性能,因为都需要遍历第一个链表,找到an,然后将b1链接到an的后面,时间复杂度是:O(n).若在尾指针表示的单循环链表上实现,则只需改变指针,无需遍历,时间复杂度是:O(1) 现在看算法实现,需要4个主要步骤,都注释了: LinkList Connect(LinkList A,LinkList B){ //假设A,B为非空循环链表的尾指针 LinkList p = A->next;//1.保存A链表的头结点的位置 A->next = B->