24.判断带头结点的B是不是A的连续子序列

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
    ElemType data;
    struct LNode *next;    
}LNode,*LinkList;

//尾插法 
 LinkList List_TailInsert(LinkList &L)
 {
     ElemType x;
     L=(LinkList)malloc(sizeof(LNode));
     LNode *s,*r=L;
     printf("请输入单链表各个节点,以9999结束!\n"); 
     scanf("%d",&x);
     while(x!=9999)
     {
         s=(LNode*)malloc(sizeof(LNode));
         s->data=x;
         r->next=s;
         r=s;
         scanf("%d",&x);
             
     }
     
     r->next=NULL;
     
     return L;
    
  }
   int Length(LinkList L)
 {
     LNode *p=L;
     int count=0;
     while(p->next!=NULL)
     {
         p=p->next;
         count++;
     }
     return count;
     
 }
 int Pattern(LinkList A,LinkList B)
 {
     LNode *p=A->next,*q=B->next,*pre=p;
     while(p&&q)
     {
         if(p->data==q->data)
         {
         
             p=p->next;
             q=q->next;
         }
         else
         {
             pre=pre->next;
             p=pre;
             q=B;
         }
        
         
         
         
     }
      if(q==NULL)
         return 1;
         else
         return 0;
     
     
     
     
  } 
 
  int main(){
    LinkList L1,L2;
    LinkList R,S,C;
    R=List_TailInsert(L1);
    S=List_TailInsert(L2);
    int a=Pattern(R,S);
    if(a==1)
        printf("B是A的连续子序列");
    
    else
        printf("B不是A的连续子序列");
     
        
    
    
}

 

上一篇:数据结构(C++)--学习单链表时发现的一些小坑


下一篇:C++实现链表相关的基础操作