【2012 统考真题/完整代码】找单词共同后缀的起始位置

2024-03-31 23:20

本文主要是介绍【2012 统考真题/完整代码】找单词共同后缀的起始位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间,例如,“loading”和“being”的存储映像如下图所示。

设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为data | next ,请设计一个时间上尽可能高效的算法,找出由str1和str2所指向两个链表共同后缀的起始位置(如图中字符i所在结点的位置p)。

思路

求出两个链表长度,让长的那个链表指针向前移动使两个链表末尾对齐(到最后一个节点的距离一样),然后同步向后移动,直到两个链表的指针地址一样时即为共同后缀起始位置。

下面为从构建链表到求出结果的完整代码。

完整代码

#include <iostream>
using namespace std;struct Node {char data;Node* next;Node(char val) : data(val), next(nullptr) {}
};class LinkedList {
private:Node* head;
public:LinkedList() {head = new Node(0);  //头结点}void append(char val) {Node* current = head;while (current->next != nullptr) {current = current->next;}current->next = new Node(val);}void append(string val) {Node* current = head;while (current->next != nullptr) {current = current->next;}for (char ch:val){current->next = new Node(ch);current = current->next;}}void joint(LinkedList& list) { //连接两个链表Node* current = head;while (current->next != nullptr) {current = current->next;}current->next = list.getHead()->next;}Node* getHead() {return head;}void display() {Node* current = head;current = current->next; // 跳过头结点while (current != nullptr) {cout << current->data << " ";current = current->next;}}int length() {Node* current = head;int count = 0;while (current->next != nullptr) {count++;current = current->next;}return count;}void clear() {Node* current = head->next;while (current != nullptr) {Node* temp = current;current = current->next;delete temp;}head->next = nullptr;}//~LinkedList() {//    clear(); //    delete head;//}};int main() {LinkedList list1, list2,listend;list1.append("load");list2.append("be");listend.append("ing");list1.joint(listend);list2.joint(listend);list1.display();cout << endl;list2.display();cout << endl<<endl;int m, n;Node *p, *q;m = list1.length(); //分别计算两个链表的长度n = list2.length();//让两个链表从后往前长度相等for (p = list1.getHead(); m>n ; m--)p=p->next;for (q = list2.getHead(); n>m ; n--)q=q->next;//共同往后移动,直到找到相同的地址while (p->next != nullptr && q->next != p->next) {//只有共同后缀的地址才相同,前面遇到相同字母(如abcding,xcying的c)不会结束循环p=p->next;q=q->next;}cout << "起始位置为:" << p->next->data << endl;
}

这篇关于【2012 统考真题/完整代码】找单词共同后缀的起始位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865630

相关文章

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat