【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

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

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

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