单链表第十六题(判断是否是子序列)

该算法用于检查两个单链表,A和B,是否序列B是序列A的连续子序列。通过遍历链表A并比较每个节点的数据与链表B的当前节点,如果遇到不匹配,则B从头开始与A的下一个节点进行比较。若B的指针到达末尾,则表明B是A的子序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 16.两个整数序列A=a1,a2,a3,....am和B=b1,b2,b3,....bn已经存入两个单链表中,

    设计一个算法,判断序列B是否是序列A的连续子序列。

/*

   存在两个单链表序列A,B,设计函数判断是否为A的子序列。

   分析:

                最直接的方法:循环遍历,从A链的第一个元素开始与B链对比,

 如遇见不同,从A链下一个又开始,直至到达链尾

*/

#include<stdio.h>

#include"linkStruct.h"//通过自创建头文件引入结构体,ctrl+鼠标左键即可查看

void  subList(Link  *a,Link  *b){

            Link  *la=a,*pA=la->next,*pB=b->next;

             while(paA&&pB){

                      if(pA->data==pB->data){

                           pA=pA->next;

                            pB=pB->next;

                    }

                  else{

                          pB=b->next;//pb从头开始与pa对比

                           la=la->next;//失败一次,la往后移动一个节点

                           pA=la->next;//pa从下个节点又开始

                           }

              }

             pB==NULL?printf("true"):printf("false");//如果pb为NULL说明已比对完成

}

int   main(){

           Link   *a,*b;

           Link   *createLink(int);

            a=createLink(0);

            b=createLink(0);

            subList(a,b);

            return     0;    

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值