问答题 两个整数序列A=a 1 ,a 2 ,a 3 ,…,a n 和B=b 1 ,b 2 ,b 3 ,…,b n 已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列。【东北大学1999年】
【正确答案】正确答案:算法的基本设计思想:因两整数序列已存入两个链表中,操作从两链表的第一个结点开始,若对应数据相等,则后移指针:若对应数据不等,则A链表从上次开始比较结点的后继开始,B链表仍从第一个结点开始比较,直到B链表到尾表示匹配成功。A链表到尾B链表未到尾表示失败。操作中应记住A链表每次的开始结点,以便下趟匹配时好从其后继开始。算法的代码: int Pattern(LinkedLiSt A,LinkedLiSt B){ //A和B分别是数据域为整数的单链表,本算法判断B是否是A的子序列’ //如是,返回1;否则,返回0 p=A; //p为A链表的工作指针,本题假定A和B均无头结点 pre=p; //pre记住每趟比较中A链表的开始结点 q=B; //q为B链表的工作指针 while(p&&q) if(p一>data==q一>data) { P=P一>next; q=q一>next; } e1Se { Pre=pre一>next ; p=pre; //A链表新的开始比较结点 q=B; } //q从B链表第一个结点开始 if(q==NULL) return 1; //B是A的子序列 e1Se return 0 ; //B不是A的子序列 }//Pattern
【答案解析】