• 基础实验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的公共后缀的起点位置。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef char ElementType;
    
    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data; /* 存储结点数据 */
        PtrToNode   Next; /* 指向下一个结点的指针 */
    };
    typedef PtrToNode List; /* 定义单链表类型 */
    
    void ReadInput( List L1, List L2 ); /* 裁判实现,细节不表 */
    void PrintSublist( PtrToNode StartP ); /* 裁判实现,细节不表 */
    PtrToNode Suffix( List L1, List L2 );
    
    int main()
    {
        List L1, L2;
        PtrToNode P;
    
        L1 = (List)malloc(sizeof(struct Node));
        L2 = (List)malloc(sizeof(struct Node));
        L1->Next = L2->Next = NULL;
        ReadInput( L1, L2 );
        P = Suffix( L1, L2 );
        PrintSublist( P );
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    
     

    输入样例:

    如图存储的链表
    
     

    fig.jpg

    输出样例:

    ing

    代码:
    PtrToNode Suffix( List L1, List L2 ) {
        int num1 = 0,num2 = 0;
        List t = L1 -> Next,a = L1 -> Next,b = L2 -> Next;
        while(t) {
            num1 ++;
            t = t -> Next;
        }
        t = L2 -> Next;
        while(t) {
            num2 ++;
            t = t -> Next;
        }
        while(num1 > num2) {
            num1 --;
            a = a -> Next;
        }
        while(num2 > num1) {
            num2 --;
            b = b -> Next;
        }
        while(a) {
            if(a == b) return a;
            a = a -> Next;
            b = b -> Next;
        }
        return NULL;
    }
  • 相关阅读:
    二级域名绑定子目录
    Promise.all的使用
    react的状态管理
    chrome调试
    组件之间通讯
    promise-async-await
    深入理解AMQP协议转载
    java中堆栈(stack)和堆(heap)
    面试题(Spring)
    IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别参考
  • 原文地址:https://www.cnblogs.com/8023spz/p/12302737.html
Copyright © 2020-2023  润新知