问题:
两个整数序列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的子序列
}