问答题
两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列。【东北大学1999二(10分)】
【正确答案】正确答案:操作从两链表的第一个结点开始,若对应数据相等,则后移指针;若对应数据不等,则A链表从上次开始比较结点的后继开始,B链表仍从第一结点开始比较,直到B链表尾,表示匹配成功。A链表到尾B链表未到尾表示失败。操作中应记住A链表每次的开始结点,以便下趟匹配时从其后继开始。核心语句段如下: while(p&&q)//p和q指向A和B当前结点,pre记住每趟比较中A链表的开始结点 if(p一>data==q一>data){p=p一>next;q=q一>next;) else{pre=pre->next;p=pre; q=B) //A链表新的开始结点P,q指向B的第一个结点 if(q==null)return(1); lib是A的子序列 else return(0);lib不是A的子序列
【答案解析】