两个整数序列A=a1,a2,a3......am,B=b1,b2,b3.....bn已经存入两个单链表中,设计一个算法,判断序列B是否为A的连续子序列。
思想:
从前往后比较两个链表,若相等,则两个表的工作指针均向后移动,若不同,则A表从上次开始比较节点的后继节点开始,B表从第一个元素开始比较。当表B遍历完后,则说明是子序列,若A表先遍历完,则不是子序列。
代码:
bool containB(LinkList A,LinkList B){LNode *p=A;//A工作指针 LNode pre=p;//用来标记每趟A链表开始的节点 LNode *q=B;//B工作指针 while(p!=NULL && q!=NULL){if(p->data==q->data){//值相同时,两个表的工作指针均向后后移 p=p->next;q=q->next;}else{//值不相等时,A表从这一趟开始节点的后一个节点开始。//B表从第一个元素开始 pre=pre->next;p=pre;q=B;}}if(q==NULL){//B表结束,说明是A序列 return true;}else{//B不是A的序列 return false;}}
时间复杂度O(m+n),空间复杂度O(1)