[QUN] 2024-06-28 15:13 采纳率: 66.7%
浏览 3
已结题

计算机408-考研-跨行-判断单链表中序列B是否为序列A的连续子序列的算法设计

问题:
两个整数序列A=(a1,.., an)和B=(b1,...,bn)已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的连续子序列。

注意:
这是数据结构的一道综合应用题,不需要完整的程序代码,只需要符合要求的代码片段

书本解答:

int pattern(LinkList A,LinkList B){
    LNode *p=A;        //p为A链表的工作指针,本题假设A和B均无头结点 
    LNode *pre=p;      //pre记住每趟比较中A链表的开始结点 
    LNode *q=B;        //q是B链表的工作结点 
    while(p&&q){
        if(p->data == q->data){
            p=p->next;
            q=q->next;    
        }else{
            pre=pre->next;
            p=pre;     //A链表开始新的比较结点
            q=B;       //q从B链表第一个结点开始 
        }
    }
    if(q==NULL)        //B已经比较结束 
        return true;   //说明B是A的子序列 
    else
        return false;   //说明B不是A的子序列 
} 

疑问:
pre的存在是否有必要?为什么不能通过p=p->next直接代替pre=pre->next;p=pre;

我的代码:

int pattern(LinkList A,LinkList B){
    LNode *p=A;        //p为A链表的工作指针,本题假设A和B均无头结点  
    LNode *q=B;        //q是B链表的工作结点 
    while(p&&q){
        if(p->data == q->data){
            p=p->next;
            q=q->next;    
        }else{
            p=p->next;
            q=B;       //q从B链表第一个结点开始 
        }
    }
    if(q==NULL)        //B已经比较结束 
        return true;   //说明B是A的子序列 
    else
        return false;   //说明B不是A的子序列 
} 
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2024-07-02 14:10
    关注

    pre的作用是遍历一次序列A链表,来查找它的连续子序列 B 链表 。具体就是:有整数序列A=(a1,.., an),起始时 p 、pre都指向 a1,q 指向 b1,当 p->data != q->data 时,pre = pre->next; 此时 pre 指向了 a2,接着让 p = pre;也就是让 p 也指向 a2,同时让 q = B;也就是让 q 重新指向 b1,然后进行下一轮的从 a2 开始的序列比较,如果还是不同,pre = pre->next;pre 即指向 a3,p 也调整到 a3,q 重新指向 b1,再继续比较。如果找到一直相同,那么直到 q = NULL 时即序列 B 表尾,跳出 while()循环,表示找到了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 修改了问题 6月28日
  • 创建了问题 6月28日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵