鏈表 | 判斷鏈表B是否為鏈表A的連續子序列
阿新 • • 發佈:2018-02-17
link 空指針 sub int isp b- put puts post
王道P38T16
代碼:
bool common_subSequence(LinkList &A,LinkList &B){ LNode *pA,*pB=B->next,*p=A->next; while(p!=NULL){ if(p==NULL || pB==NULL) return false; if(p->data == pB->data){ pA=p; while(pA!=NULL && pB!=NULL){if(pA->data != pB->data){ break; } pA=pA->next; pB=pB->next; } if(pB==NULL) return true; pB=B->next; } p=p->next; } return false; }
主代碼:
#include <cstdio> #include <stdlib.h> using namespace std; typedef struct LNode{ int data; struct LNode* next=NULL; LNode(int x=0){ data=x; } }LNode; typedef LNode* LinkList; LinkList build_list(int * arr,int n){ int i; LinkList L=new LNode; LinkList preView Code=L; for(i=0;i<n;i++){ LinkList p=new LNode(arr[i]); pre->next=p; pre=p; } return L; } void show_list(LinkList& L){ LinkList p=L->next; while(p){ printf("%d ",p->data); p=p->next; } puts(""); } bool common_subSequence(LinkList &A,LinkList &B){ LNode *pA,*pB=B->next,*p=A->next; while(p!=NULL){ if(p==NULL || pB==NULL) return false; if(p->data == pB->data){ pA=p; while(pA!=NULL && pB!=NULL){ if(pA->data != pB->data){ break; } pA=pA->next; pB=pB->next; } if(pB==NULL) return true; pB=B->next; } p=p->next; } return false; } int main(){ int A_arr[5]={0,0,2,2,2}; int B_arr[3]={2,2,2}; LinkList A=build_list(A_arr,5); LinkList B=build_list(B_arr,3); puts(common_subSequence(A,B)?"Yes":"No"); }
註意:
註意紫色代碼處的工作指針p的滑動和橙色代碼處的pB空指針判斷。
鏈表 | 判斷鏈表B是否為鏈表A的連續子序列