找出由str1和str2所指向两个链表共同后缀的起始位置

该博客介绍了如何找到两个带头结点的单链表中相同后缀的起始位置,以节省存储空间。算法首先计算两个链表的长度,然后将它们尾部对齐,最后同步移动指针直到找到共同后缀的开始位置。代码实现的时间复杂度为O(max(m, n)),其中m和n为链表长度。" 113008724,10294295,MII与RMII转换问题:从SAM9260开发板到目标板的PHY链接调整,"['嵌入式开发', 'ARM处理器', '网络接口']
摘要由CSDN通过智能技术生成

题目(2012统考真题):
假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间,例如,“loading”和"being"的存储映像如下图所示:
在这里插入图片描述设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为(data,next),请设计一个时间上尽可能高效的算法,找出由str1和str2所指向两个链表共同后缀的起始位置(如图中字符i所在结点的位置p)。要求:

(1)给出算法的基本设计思想。

(2)根据设计思想,采用C或C++或java语言描述算法关键之处给出注释。

(3)说明你所设计算法的时复杂度。

基本设计思想:

  1. 分别求出str1和str2所指的两个链表的长度m和n;
  2. 将两个链表以表尾对齐:令指针p、q分别指向str1和str2的头结点;如果m>=n,则p指针先走,使p指向链表中的第m-n+1个结点;如果m<n,则使q指针指向链表的第n-m+1个结点;即:使得指针p、q所指的结点到表尾的长度相等;
  3. 反复将指针q和q同步向后移动,当p、q指向同一位置时停止,即:共同后缀的起始位置。算法结束。

代码:

typedef struct LNode{
   
    char data;
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值