【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实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=