王道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=){
data=x;
}
}LNode; typedef LNode* LinkList; LinkList build_list(int * arr,int n){
int i;
LinkList L=new LNode;
LinkList pre=L;
for(i=;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[]={,,,,};
int B_arr[]={,,};
LinkList A=build_list(A_arr,);
LinkList B=build_list(B_arr,);
puts(common_subSequence(A,B)?"Yes":"No");
}

注意:

注意紫色代码处的工作指针p的滑动和橙色代码处的pB空指针判断。

链表 | 判断链表B是否为链表A的连续子序列的更多相关文章

  1. 判断序列B是否是序列A的连续子序列

    算法思想:因为两个整数序列已存入两个链表中,操作从两个链表的第一个结点开始,若对应得数据相等,则后移指针,若对应的数据不等,则A列表从上次开始比较结点的后继开始,B链表仍从第一个结点开始,直到B链表到 ...

  2. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  3. LeetCode OJ:Palindrome Linked List(回文链表判断)

    Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...

  4. LeetCode 234. Palindrome Linked List(判断是否为回文链表)

    题意:判断是否为回文链表,要求时间复杂度O(n),空间复杂度O(1). 分析: (1)利用快慢指针找到链表的中心 (2)进行步骤(1)的过程中,对前半部分链表进行反转 (3)如果链表长是偶数,首先比较 ...

  5. C语言 链表的使用(链表的增删查改,链表逆转,链表排序)

    //链表的使用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include< ...

  6. [剑指offer] 14. 链表中倒数第K个节点+翻转+逆序打印+合并两个排序链表 + 链表相交(第一个公共节点) (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:  两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相 ...

  7. 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解

    数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...

  8. Python链表的实现与使用(单向链表与双向链表)

    参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...

  9. c语言——单链表分拆——头插法创建链表,尾插法生成链表

    #if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...

  10. 剑指Offer 56. 删除链表中重复的结点 (链表)

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

随机推荐

  1. 类、闭包、monand

    类.闭包.monand 三者的相同点都是封装了数据与操作. 类:定义数据类型,倾向于数据的抽象:集合数据为操作提供上下文. 闭包:对环境变量和操作的封装抽象.操作基于环境变量,核心问题是环境变量的管理 ...

  2. C# - List.Sort()自定义排序方法

    本文通过示例介绍了C#中典型容器List.Sort()的自定义排序方法,进而引出了C#中自定义排序的核心接口及方法 项目地址:自定义Sort方法 - SouthBegonia's Github Lis ...

  3. Oracle的约束

    学习笔记: ##约束     *概念:限定用户输入的内容.     *案例:         *练习             * 1. 在score表的grade列添加CHECK约束,限制grade列 ...

  4. ABP 临时禁用TenantId IsDelete过滤

    由于业务需求,需要查询host的配置,所以要放开权限给租户查询其他租户的数据 直接在业务方法内嵌套 List<string> list = new List<string>() ...

  5. 几何不变矩--Hu矩

    [图像算法]图像特征: ---------------------------------------------------------------------------------------- ...

  6. springboot整合docker部署

    环境安装 首先,需要安装Docker(例如:docker for windows) 下载地址:https://download.docker.com/win/stable/Docker%20for%2 ...

  7. ECharts堆叠柱状图label显示总和

    Echarts本身没提供现成的解决方案. option = { title: { text: '分类销量' }, legend: { y: "bottom", data: ['百货 ...

  8. Vue学习之动画小结(六)

    一.Vue中实现动画的方式:https://cn.vuejs.org/v2/guide/transitions.html Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括 ...

  9. 【Idea】idea中spring框架配置文件,无法自动提示spring配置

  10. first集合follow集的求法

    FIRST集的定义 : 设G=(VT,VN,P,S)是上下文无关文法 FIRST(a)={a|a=>*ab,a∈VT, a,b∈V*} 若a=>*ε则规定ε∈FIRST (a) FIRST ...