题记(26)--Sharing(链表公共后缀)

目录

一、题目内容

二、输入描述

三、输出描述

四、输入输出示例

五、完整C语言代码


一、题目内容

To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, "loading" and "being" are stored as showed in Figure 1.

二、输入描述

For each case, the first line contains two addresses of nodes and a positive N (<= 10^5), where the two addresses are the addresses of the first nodes of the two words, and N is the total number of nodes. The address of a node is a 5-digit positive integer, and NULL is represented by -1. Then N lines follow, each describes a node in the format: Address Data Next where Address is the position of the node, Data is the letter contained by this node which is an English letter chosen from {a-z, A-Z}, and Next is the position of the next node.

三、输出描述

For each case, simply output the 5-digit starting position of the common suffix. If the two words have no common suffix, output "-1" instead.

四、输入输出示例

输入:

11111 22222 9
67890 i 00002
00010 a 12345
00003 g -1
12345 D 67890
00002 n 00003
22222 B 23456
11111 L 00001
23456 e 67890
00001 o 00010
00001 00002 4
00001 a 10001
10001 s -1
00002 a 10002
10002 t -1

输出:

67890
-1

五、完整C语言代码

AC代码~

#include<stdio.h>
#include<stdlib.h>

typedef struct Linklist {
    char ch;
    struct Linklist* next;
    int add;
    int nextadd;
} L;

int Linklen(L* h) {  // 求链表长度
    L* tmp = h->next;
    int len = 0;
    while (tmp != NULL) {
        len++;
        tmp = tmp->next;
    }
    return len;
}

int main() {
    int n, f1, f2;
    while (scanf("%d%d%d", &f1, &f2, &n) != EOF) {
        L* a = (L*)malloc(n * sizeof(L));  // 结构体数组
        L* h1 = (L*)malloc(sizeof(L)); // 头节点
        L* h2 = (L*)malloc(sizeof(L));
        for (int i = 0; i < n; i++)
            scanf("%d %c %d", &a[i].add, &a[i].ch, &a[i].nextadd);
        int head1, head2;
        for (int i = 0; i < n; i++) { // 找出第一个节点的编号
            if (a[i].add == f1)
                head1 = i;
            if (a[i].add == f2)
                head2 = i;
        }
        h1->next = NULL;
        h2->next = NULL;
        h1->next = &a[head1];
        h2->next = &a[head2];
        L* tail1 = h1->next;       // 尾指针
        L* tail2 = h2->next;
        while (tail1->nextadd != -1) { // h1链连接好
            int i = 0;
            for (i = 0; i < n; i++) {
                if (a[i].add == tail1->nextadd) {
                    tail1->next = &a[i];
                    tail1 = &a[i];
                    break;
                }
            }
        }
        tail1->next = NULL;
        while (tail2->nextadd != -1) { // h2链连接好
            int i = 0;
            for (i = 0; i < n; i++) {
                if (a[i].add == tail2->nextadd) {
                    tail2->next = &a[i];
                    tail2 = &a[i];
                    break;
                }
            }
        }
        tail2->next = NULL;
        int len1 = Linklen(h1);
        int len2 = Linklen(h2);
        int dist;
        L* longL;            // long指向较长的链表
        L* shortL;           // short指向较短的链表
        if (len1 >= len2) {  // dist为二者长度差值
            longL = h1->next;
            shortL = h2->next;
            dist =  len1 - len2;
        } else {
            longL = h2->next;
            shortL = h1->next;
            dist =  len2 - len1;
        }
        while (dist > 0) {  // 较长的先走dist步 目的是使二者对齐
            dist--;
            longL = longL->next;
        }
        longL = longL->next;  // 二者都走一步(第一个节点就相等不算“公共后缀”)
        shortL = shortL->next;
        while (longL != NULL) {   // 相等的节点则是公共后缀的第一个
            if (longL->ch == shortL->ch && longL->nextadd == shortL->nextadd) {
                printf("%d\n", longL->add);
                break;
            }
            longL = longL->next;
            shortL = shortL->next;
        }
        if (longL == NULL)
            printf("-1\n");
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/343464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis----缓存

MyBatis是一个流行的Java持久化框架&#xff0c;它提供了一个灵活的缓存机制来提高查询性能。 MyBatis的缓存机制主要分为一级缓存和二级缓存。 一级缓存是指在同一个SqlSession中&#xff0c;查询结果会被缓存起来&#xff0c;当再次执行同样的查询时&#xff0c;直接从缓存中…

Python学习04—基本图形绘制

通过一个案例来初步认识Python的图形绘制 案例&#xff1a;绘制Python蟒蛇 #PythonDraw.py import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40) for i…

基于springboot+vue的“衣依”服装销售平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

使用云服务器被攻击,该如何防止ddos攻击

目前我们运行各项网络业务都离不开服务器&#xff0c;现在使用比较多的都是云服务器了。大家都知道&#xff0c;目前市场上用的云服务器大多数都是没有带什么防护了&#xff0c;那么用云服务器的时候&#xff0c;如果遭受到了ddos攻击&#xff0c;该怎么办&#xff0c;云服务器…

司铭宇老师:家具导购销售培训:家具导购员销售技巧和话术

家具导购销售培训&#xff1a;家具导购员销售技巧和话术 在现代家居市场中&#xff0c;家具不仅仅是日常生活的必需品&#xff0c;更是体现居住者个性和生活品味的重要元素。作为家具导购员&#xff0c;掌握专业的销售技巧和巧妙的话术对于吸引顾客、提高成交率至关重要。本文将…

[每日一题] 01.23 - 画矩形

画矩形 height,width,c,d input().split() height,width,d int(height),int(width),int(d) lis [c * width if d else c * (width - 2) c for i in range(height) ]lis: ##### # # # # ##### 或 # # # # # # # #if not d:print(c * width)for i in lis[1:-1…

【Linux编辑器-vim使用】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、vim的基本概念 二、vim的基本操作 分屏操作&#xff1a; 三、vim正常&#xff08;命令&#xff09;模式命令集 四、vim末行&#xff08;底行&#xff09;模…

PHP+vue+Mysql家庭理财管理系统演5x6nf

本文着重阐述了收支管理系统的分析、设计与实现&#xff0c;首先介绍开发系统和环境配置、数据库的设计&#xff0c;对系统的功能需求作出分析&#xff0c;根据需求对系统进行设计&#xff0c;明确各个部分的规范&#xff0c;来完成系统的设计。最后在对设计的系统进行一系列的…

项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)

XPCIE1032H功能简介 XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡&#xff0c;可选6-64轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 XPCIE1032H集成了强大的运动控制功能&#xff0c;结合MotionRT7运动…

Mysql学习笔记系列(一)

本次mysql系列不会讲解具体的查询语句&#xff0c;而是放在mysql的一些性能优化和一些特性上&#xff0c;是学习笔记&#xff0c;供大家参考补充。 慢查询 MySQL的慢查询&#xff0c;全名是慢查询日志&#xff0c;是MySQL提供的一种日志记录&#xff0c;用来记录在MySQL中响应…

Java下载FTP服务器上的资源,附带FTP工具类

通过xftp可以看到目标服务器上面的资源如下&#xff1a; 第一步&#xff1a;导入ftp依赖&#xff1a; <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.7</version> <!-- 使用最新…

Portainer Docker容器可视化管理平台实践

Portainer Docker容器可视化管理平台实践 引安装登录Remote ENV 实践 引 平常用docker命令操作比较多&#xff0c;找了一款docker可视化工具&#xff0c;方便快速预览和批量操作&#xff0c;不想一行一行敲的时候&#xff0c;可以偷偷懒。Portainer试用了一下&#xff0c;安装…

Hbas简介:数据模型和概念、物理视图

文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容&#xff0c;仅供学习…

特斯联携手华为发布联合解决方案,助力京津冀千行百业智能升级

近日&#xff0c;特斯联受邀出席了由廊坊市人民政府主办&#xff0c;廊坊经济技术开发区管委会联合华为技术有限公司协办的河北人工智能计算中心上线仪式暨新一代信息技术高端论坛&#xff0c;在论坛上&#xff0c;华为携手特斯联等伙伴共同发布了河北人工智能计算中心联合解决…

Git--基本操作介绍(2)

Git 常用的是以下 6 个命令&#xff1a;git clone、git push、git add 、git commit、git checkout、git pull. 说明&#xff1a; workspace&#xff1a;工作区staging area&#xff1a;暂存区/缓存区local repository&#xff1a;版本库或本地仓库remote repository&#xf…

VS2019查看文件编码格式

文件->高级保存选项 在这里可以看见现在的编码格式也可以修改编码格式 如果没有高级保存选项的话可以参考这篇博客进行设置

人大金仓数据库授权文件过期解决

一台用于测试的人大金仓数据库访问失败。 登录后发现服务停了。 使用命令行启动&#xff0c;提示服务过期。 查网上资料&#xff0c;说替换原有文件可以解决。 于是去官网下载一个新的&#xff0c;替换掉原来的授权文件。 再次启动数据库&#xff0c;还是提示授权文件过期。…

leetcode:最接近的三数之和---(双指针,排序,数组)

题目&#xff1a; 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;nums [-1…

第一堂复试

1.数据结构的基本概念 数据元素 相当于一个类 数据对象是数据元素的集合 数据项&#xff1a;具体的属性 2.数据结构三要素 1.一般线性表相当于数组&#xff0c;2.栈先进后出&#xff0c;3.队列先进先出 非线性结构一般是一对多 线性结构一般是一对一 3.数据的存储结构 4.算…

通过curl访问k8s集群获取证书或token的方式

K8S安全控制框架主要由下面3个阶段进行控制&#xff0c;每一个阶段都支持插件方式&#xff0c;通过API Server配置来启用插件。 1. Authentication&#xff08;认证&#xff09; 2. Authorization&#xff08;授权&#xff09; 3. Admission Control&#xff08;准入控制&#…